一个简单的API

Web API

  1. 我们要写一个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.");
    });
    

    这里需要注意的地方:

    1. __dirname

      __dirname表示的是当前文件的位置。我们在执行脚本文件的时候还有一个执行的位置,这样写可以保证确定我们可以找到我们想要找到的对应的文件。

    2. 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.");
});
  1. 把读取data的内容写到外面,这里叫做top-level code,顶层代码,这里的代码只执行一次,就是在这个脚本执行的时候,所以不存在阻塞,可以用同步读取。
  2. 注意的是,我们一般都会把只需要执行一次的代码写到顶层。因为下面createServer的代码是循环执行的,会一直在执行,如果把这些代码写在里面,消耗不必要的资源。
posted @ 2022-06-18 02:48  kihyun  阅读(56)  评论(0编辑  收藏  举报