标签:const 一个 res writeHead json API pathName 简单 data
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的代码是循环执行的,会一直在执行,如果把这些代码写在里面,消耗不必要的资源。
标签:const,一个,res,writeHead,json,API,pathName,简单,data 来源: https://www.cnblogs.com/kihyunBlog/p/16387549.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。