一个简单的API
Web API
-
我们要写一个api去读取一个json文件里面的内容
这里是最初的版本
const server = http.createServer((req, res) => { const pathName = req.url; if (pathName === "/api") { // __dirname是当前文件所在的位置 fs.readFile(`${__dirname}/dev-data/data.json`, "utf-8", (err, data) => { const productData = JSON.parse(data); res.writeHead(200, { "Content-type": "application/json" }); res.end(data); }); } else { // 写404状态码,输出在控制台中 res.writeHead(404, { "Content-type": "text/html", "my-own-header": "hello world!", }); res.end("<h1>Page not found!</h1>"); } }); server.listen(8000, "127.0.0.1", () => { console.log("Listening to requests on port 8000."); });
这里需要注意的地方:
-
__dirname
__dirname表示的是当前文件的位置。我们在执行脚本文件的时候还有一个执行的位置,这样写可以保证确定我们可以找到我们想要找到的对应的文件。
-
writeHead
res.writeHead(200, { "Content-type": "application/json" });
这里相当于是后端返回给前端的状态码,以及在响应头写上返回的是什么样子的数据。收到这样的数据才能确定这一部请求数据是否成功或者是什么状态。
-
这里是修改之后的版本
// 把这里的内容写到外面了
const data = fs.readFileSync(`${__dirname}/dev-data/data.json`, "utf-8");
const dataObj = JSON.parse(data);
const server = http.createServer((req, res) => {
const pathName = req.url;
if (pathName === "/" || pathName === "/overview") {
res.end("This is the OVERVIEW!");
} else if (pathName === "/product") {
res.end("This is the PRODUCT!");
} else if (pathName === "/api") {
res.writeHead(200, { "Content-type": "application/json" });
res.end(data);
} else {
// 写404状态码,输出在控制台中
res.writeHead(404, {
"Content-type": "text/html",
"my-own-header": "hello world!",
});
res.end("<h1>Page not found!</h1>");
}
});
server.listen(8000, "127.0.0.1", () => {
console.log("Listening to requests on port 8000.");
});
- 把读取data的内容写到外面,这里叫做top-level code,顶层代码,这里的代码只执行一次,就是在这个脚本执行的时候,所以不存在阻塞,可以用同步读取。
- 注意的是,我们一般都会把只需要执行一次的代码写到顶层。因为下面createServer的代码是循环执行的,会一直在执行,如果把这些代码写在里面,消耗不必要的资源。