Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在NodeJs中读取JSON文件_Json_Node.js - Fatal编程技术网

在NodeJs中读取JSON文件

在NodeJs中读取JSON文件,json,node.js,Json,Node.js,我有一个包含此内容的小JSON文件 { "users": [ { "id": 1593, "name": "Foo Bar" } ] } 我想通过使用文件系统模块来阅读这些内容。所以我的应用程序看起来是这样的 const fs = require('fs'); const express = require('express'); const app = express(); app.get('/users/:id', function (r

我有一个包含此内容的小JSON文件

{
  "users": [
    {
      "id": 1593,
      "name": "Foo Bar"
    }
  ]
}
我想通过使用文件系统模块来阅读这些内容。所以我的应用程序看起来是这样的

const fs = require('fs');
const express = require('express');

const app = express();

app.get('/users/:id', function (req, res) {
  fs.readFile('./userDb.json', 'utf8', function (err, data) {
    var json = JSON.parse(data);
    var users = json.users;

    console.log(users[0].id); // returns 1593

    console.log(req.params.id); // returns 1593

    var userObj = null;

    for(var i = 0; i < users.length; i++){
      var currentUser = users[i];

      console.log(currentUser.id); // returns 1593

      if (currentUser.id === req.params.id) { // this should be fine 1593 === 1593
         userObj = currentUser;
         break;
      }
    }

    console.log(userObj); // returns undefined

    res.render('users', {
      user: userObj
     });
  });
});

app.listen(3000, function () {
  console.log('Server running on port 3000');
});

但我认为数据库没有错。我在哪里犯了一个错误=?

非常确定
req.params.id
是一个
字符串。尝试:

const userObj = users.find(u => u.id === Number(req.params.id));

当您对此有疑问时:

console.log(
       `First value : ${v1} - ${typeof v1}`,
       `Second value : ${v2} - ${typeof v2}`,
);
请更换

 if (currentUser.id === req.params.id) 

由于req.params.id是一个字符串,而currentUser.id是一个数字,因此无法严格比较它们。 然而,一个非严格的比较应该很好

console.log(userObj); // returns undefined
在readFile回调后调用,这是一个! 您必须移动您的:

 res.render('users', {
      user: userObj
     });

在readFile函数的末尾

仅添加-其他选项可以是非严格的(
==
)comparison@codtex它可以工作(是:),但是如果您稍后再来查看代码,就会更容易理解。不严格的比较和一个好的评论会和Cast一样好如果你在soluce@Question3r上写的话记得插入一个评论,让下一个开发者知道它为什么在这里。因为它会认为你只是忘记了使用
==
,这对于初学者来说是一个常见的错误。
console.log(userObj); // returns undefined
 res.render('users', {
      user: userObj
     });