在NodeJs中读取JSON文件
我有一个包含此内容的小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
{
"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
});