章
目
录
Bun作为一款快速且功能全面的JavaScript运行环境,它提供了简单易用的API,能帮助我们轻松搭建HTTP服务器。接下来,就为大家详细介绍如何使用Bun.serve API来搭建一个基础的HTTP服务器,并通过具体实例展示其丰富功能。
一、创建新项目
搭建服务器的第一步,是创建一个新的项目目录并初始化Bun项目。在终端中执行以下命令:
mkdir quickstart
cd quickstart
bun init
执行bun init
命令后,会有一系列提示。按照提示输入项目名称,接着可以选择入口文件名(默认是index.ts
)。如果没有特殊需求,直接按Enter键接受所有默认设置就行。这样,一个新的Bun项目就初始化完成了。
二、编写HTTP服务器代码
项目创建好后,打开生成的index.ts
文件,把下面这段代码粘贴进去:
const server = Bun.serve({
port: 3000,
fetch(req) {
return new Response("Bun!");
},
});
console.log(`Listening on http://127.0.0.1:${server.port} ...`);
这段代码的作用是使用Bun.serve
启动一个HTTP服务器。其中,port: 3000
表示服务器监听的端口是3000;fetch
函数则定义了服务器对请求的处理方式,这里是对所有请求都返回字符串“Bun!” 。最后,通过console.log
打印出服务器的监听地址。
三、运行服务器
代码编写完成后,在终端运行以下命令启动服务器:
bun index.ts
服务器启动后,在浏览器地址栏输入http://127.0.0.1:3000
,就能看到页面上显示“Bun!”,这说明服务器已经成功运行并能正常响应请求了。
四、添加路由功能
Bun.serve还支持路由功能,借助这个功能,我们可以根据不同的URL路径返回不同的内容。看下面这个示例代码:
const server = Bun.serve({
port: 3000,
routes: {
"/": () => new Response("Home page!"),
"/blog": () => new Response("Blog page!"),
},
fetch(req) {
return new Response("404 Not Found", { status: 404 });
},
});
在这个示例里,当访问/
路径时,服务器会返回“Home page!”;访问/blog
路径,返回“Blog page!” 。如果访问其他路径,服务器就会返回404错误页面,提示“404 Not Found”。
(一)扩展路由示例
要是想添加更多路由,按照下面这种方式修改代码就可以:
const server = Bun.serve({
port: 3000,
routes: {
"/": () => new Response("Home page!"),
"/blog": () => new Response("Blog page!"),
"/about": () => new Response("About page!"),
},
fetch(req) {
return new Response("404 Not Found", { status: 404 });
},
});
这样,访问/about
路径时,就能看到“About page!”的内容了。
五、处理POST请求
Bun.serve对POST请求的处理也很方便。下面是一个处理JSON数据的示例:
const server = Bun.serve({
port: 3000,
routes: {
"/api/posts": {
POST: async req => {
const data = await req.json();
return new Response(JSON.stringify(data), {
headers: {
"Content-Type": "application/json",
},
});
},
},
},
});
在这个例子中,当有POST请求发送到/api/posts
路径时,服务器会读取请求体中的JSON数据,然后再把这些数据返回给客户端,同时设置响应头的Content-Type
为application/json
,表明返回的数据是JSON格式。
(一)POST请求示例扩展
如果要处理不同类型的POST请求,可以参考下面的代码:
const server = Bun.serve({
port: 3000,
routes: {
"/api/posts": {
POST: async req => {
const data = await req.json();
return new Response(JSON.stringify(data), {
headers: {
"Content-Type": "application/json",
},
});
},
},
"/api/files": {
POST: async req => {
const formData = await req.formData();
return new Response("File uploaded successfully!", {
headers: {
"Content-Type": "text/plain",
},
});
},
},
},
});
这段代码中,/api/posts
路径还是处理JSON数据的POST请求,而/api/files
路径则用来处理表单数据的POST请求,当收到表单数据的POST请求时,会返回“File uploaded successfully!” 。
六、使用figlet包添加ASCII艺术
为了让服务器的输出更有趣,我们可以借助figlet包把普通字符串转化为ASCII艺术形式。首先要安装figlet包,在终端执行以下命令:
bun add figlet
bun add -d @types/figlet # 如果使用TypeScript
安装完成后,更新index.ts
文件:
import figlet from "figlet";
const server = Bun.serve({
port: 3000,
fetch(req) {
const asciiArt = figlet.textSync("Bun!");
return new Response(asciiArt);
},
});
重新启动服务器,刷新页面,就能看到ASCII艺术形式的“Bun!”横幅了。
七、Bun的性能优势
Bun在性能方面表现出色,它的启动速度比传统的Node.js快很多,大约快28倍。这一优势让开发和测试过程更加高效。比如在运行脚本时,使用bun run start
就比npm run start
快不少。
(一)性能对比示例
如果想直观感受Bun和Node.js的启动速度差异,可以使用以下命令进行对比:
- Bun:
bun run start
- Node.js:
node index.js
(或者使用npm run start
)
通过实际操作这两个命令,就能明显感觉到Bun启动的快速优势了。
通过以上步骤,我们就能使用Bun快速搭建一个功能丰富的HTTP服务器。希望这篇文章能帮助大家快速上手Bun吧。