在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函数结束