目录
- 一、介绍
- 二、准备
- 三、目标
- 四、代码
- 五、知识点
- 1.res.end()
- 2.res.end与res.send
- 六、完成
一、介绍
随着技术的发展,很多前端工程师已经不满足于只做诸如页面布局和交互这些开发工作了,很多人将目光逐渐转向了“大前端”范围,其中就包括不需要依赖后端提供接口自己就可以使用 node.js 编写一个后端接口服务。
下面就让我们也来使用 node.js 完成一个新闻资讯接口吧。
二、准备
本题已经内置了初始代码,打开实验环境,目录结构如下:
└── app.js
三、目标
- 通过在 app.js 书写代码,创建一个服务器,使服务在 8080 端口运行。
- 访问 /news 返回资讯数据,访问其他任意路径均返回字符串 404 。
数据需要设置为 utf8 格式,资讯数据格式如下:
[
{
"channelId": "5572a108b3cdc86cf39001cd",
"name": "国内焦点"
},
{
"channelId": "5572a108b3cdc86cf39001ce",
"name": "国际焦点"
}
]
设置 utf8 格式代码:
res.setHeader("Content-type", "text/html;charset=utf8");
- 通过 node app.js 运行代码,使服务处于运行状态,点击右侧 【web 服务】,页面上显示访问域名+‘/news’ 返回资讯数据。效果如下:
四、代码
app.js
//TODO:待补充代码
五、知识点
1.res.end()
res.end()方法是Node.js的HTTP模块中的一个方法,用于结束响应并发送响应数据给客户端。根据Node.js的官方文档,res.end()方法的参数可以是以下几种类型之一:
- 字符串:作为响应的主体内容发送给客户端。
- Buffer:作为原始字节发送给客户端。
- 字符串数组:每个数组元素将作为单独的块发送给客户端。客户端将按照接收到的顺序连接这些块以形成完整的响应体。
2.res.end与res.send
当您在使用Markdown格式时,我将为您提供相应的文本:
res.end()
和 res.send()
都是用于结束响应并向客户端发送响应数据的方法,但它们通常用于不同的框架和环境中,具体取决于您使用的技术栈。
-
res.end()
- 是Node.js核心HTTP模块的方法,用于在原始HTTP服务器中结束响应并发送响应数据。
- 可以用于创建自定义的服务器。
- 接收一个可选的参数,用于指定要作为响应主体发送的数据,可以是字符串、Buffer或字符串数组。
示例:
const http = require("http"); const server = http.createServer((req, res) => { res.setHeader("Content-Type", "text/plain"); res.end("Hello, World!"); }); server.listen(8080, () => { console.log("Server listening on port 8080"); });
-
res.send()
- 是一种常见的方法,通常在Web框架(如Express.js)中使用,用于发送HTTP响应。
- 是Express.js提供的便捷方法,自动处理响应的内容类型、编码等,根据传入的参数自动选择合适的方式发送响应。
示例:
const express = require("express"); const app = express(); app.get("/", (req, res) => { res.send("Hello, World!"); }); app.listen(8080, () => { console.log("Server listening on port 8080"); });
总结来说,res.end()
是Node.js核心HTTP模块的方法,适用于原始的HTTP服务器,而 res.send()
通常在Web框架中使用,用于发送响应,并提供了更多便捷的功能,如自动处理响应类型。
六、完成
// TODO: 待补充代码
const http = require("http");
const serve = http.createServer();
serve.on("request", (req, res) => {
res.setHeader("Content-type", "text/html;charset=utf8");
console.log(req.url)
if (req.url == "/news") {
const data = [
{
channelId: "5572a108b3cdc86cf39001cd",
name: "国内焦点",
},
{
channelId: "5572a108b3cdc86cf39001ce",
name: "国际焦点",
},
];
//需要转换为字符串格式
res.end(JSON.stringify(data));
}else{
res.end('404')
}
});
serve.listen(8080, () => {
console.log("ok");
});