首页 > 解决方案 > 没有框架的 NodeJS:findById

问题描述

我是初学者,正在尝试使用 NodeJS 和 JSON 文件创建一个函数 findByID 作为没有框架的数据库,代码:

const http = require("http");
const url = require("url");
const fs = require("fs");
const querystring = require("querystring");

const data = fs.readFileSync("./data/data.json");
let todos = JSON.parse(data);
    const server = http.createServer((req, res) => {
        const urlparse = url.parse(req.url, true);
      if (urlparse.pathname == "/todos" && req.method == "GET") {
          const search = urlparse.search;
          if (search) { 
            const [, query] = urlparse.search.split("?");
            const data = querystring.parse(query);
            todos = todos.filter((todo) =>  todo.id === data.id);
            res.end(JSON.stringify(todos, null, 2));
          }
        }})

当我第一次与邮递员核对时,一切都很好。 第一个请求

当我第二次在响应窗口中检查时,有一个空数组。第二次请求

每个请求使用不同的 id。

标签: javascriptnode.jspostman

解决方案


我没有看到 todos 定义,所以我假设它是全局的,然后这条线在每个请求中都会改变它:

todos = todos.filter((todo) =>  todo.id === data.id);

另一件事是,如果 id 是唯一的,您可以使用它todos.find来获取第一个匹配项。

所以改为使用一个新变量并找到:

const todoMatch = todos.find((todo) =>  todo.id === data.id);

推荐阅读