在NodeJs中读取JSON文件
我有一个这个内容的小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'); });
日志将始终返回1593,当我将它作为parameter passing,但是当我想要呈现我的句柄模板时,分配的对象为空。
即使在尝试此代码时, userObj
为null
var userObj = users.find(u => u.id === req.params.id);
但我认为数据库没有错。 我在哪里犯了一个错误=?
很确定req.params.id
是一个String
。 试试:
const userObj = users.find(u => u.id === Number(req.params.id));
当你对此有疑问时:
console.log( `First value : ${v1} - ${typeof v1}`, `Second value : ${v2} - ${typeof v2}`, );
请replace
if (currentUser.id === req.params.id)
同
if (currentUser.id == req.params.id)
由于req.params.id是一个string,而currentUser.id是一个数字,所以不能严格地进行比较。 但是,一个非严格的比较应该可以正常工作。
console.log(userObj); // returns undefined
在readFilecallback之后被调用,这是一个asynchronous的非阻塞事件 ! 你必须移动你的:
res.render('users', { user: userObj });
在readFile函数结束