Node.js 我的node js程序给了我一个;TypeError:无法读取属性';然后';对于未定义的“;,读取json文件时

Node.js 我的node js程序给了我一个;TypeError:无法读取属性';然后';对于未定义的“;,读取json文件时,node.js,json,express,Node.js,Json,Express,我试图用我的程序读取frpm一个json文件夹,我想使用GET list端点通过浏览器或邮递员读取,但是我得到了上面的TypeError。这是我的密码: model.js: const fs = require('fs'); function loadTeams() { return new Promise((resolve, reject) => { fs.readFile('./json/prov-nodes.json', (err, data) =>

我试图用我的程序读取frpm一个json文件夹,我想使用GET list端点通过浏览器或邮递员读取,但是我得到了上面的TypeError。这是我的密码:

model.js:

const fs = require('fs');

  function loadTeams() {
    return new Promise((resolve, reject) => {
      fs.readFile('./json/prov-nodes.json', (err, data) => {
          if (err) reject(err);
          const teams = JSON.parse(data);
          console.log(teams);
          resolve(teams);
      });
    });
}
use(bodyParser.json())


要将
loadTeams
用作异步函数,应将其转换为返回
Promise
并返回回调结果的函数:

函数加载团队(){
返回新承诺((解决、拒绝)=>{
fs.readFile('./json/prov nodes.json',(err,data)=>{
如果(错误)拒绝(错误);
const teams=JSON.parse(数据);
控制台日志(团队);
决心(团队);
});
});
}

为了将
LoadTeam
用作异步函数,您应该将其转换为返回带有回调结果的
Promise
函数:

函数加载团队(){
返回新承诺((解决、拒绝)=>{
fs.readFile('./json/prov nodes.json',(err,data)=>{
如果(错误)拒绝(错误);
const teams=JSON.parse(数据);
控制台日志(团队);
决心(团队);
});
});
}

loadTeams函数不返回承诺,因此不能调用
.then()

您可以将函数包装为如下承诺:

函数加载团队(){
返回新承诺(功能(解决、拒绝){
fs.readFile('./json/prov nodes.json',(err,data)=>{
如果(错误)拒绝(错误);
试一试{
const teams=JSON.parse(数据);
返回解决(团队);
}捕获(e){
拒绝(e);
}
});
});
}

loadTeams函数不返回承诺,因此不能调用
.then()

您可以将函数包装为如下承诺:

函数加载团队(){
返回新承诺(功能(解决、拒绝){
fs.readFile('./json/prov nodes.json',(err,data)=>{
如果(错误)拒绝(错误);
试一试{
const teams=JSON.parse(数据);
返回解决(团队);
}捕获(e){
拒绝(e);
}
});
});
}

感谢您的及时回复。我按照您的建议进行了更改,但出现了以下错误:抛出新错误(msg);^错误:Route.post()需要回调函数,但得到了一个[object Undefined],在您提供的代码中我没有看到Route.post。你能把代码添加到原来的帖子里吗?谢谢你的及时回复。我按照您的建议进行了更改,但出现了以下错误:抛出新错误(msg);^错误:Route.post()需要回调函数,但得到了一个[object Undefined],在您提供的代码中我没有看到Route.post。你能把代码添加到原来的帖子里吗?谢谢你的回复。您的代码会对“=>”作出反应,当删除时,它需要一个“;”。然后,块“fs.readFile”中的代码不会突出显示。我更改了您提供的代码并修改了一个litlle,但现在,它运行OK并在终端中返回列表,但在浏览器和邮递员上失败。现在它返回错误并显示“notmyroot页面”,如下代码所示:app.get('/list',(req,res)=>{let teams=[];loadTeams().then(function(data){teams=data;console.log(teams);res.send(teams);}.catch(error=>console.log(error))res.send(“我的根页面”);console.log(团队);});我修复了代码您可以再次检查它,您可以用最新的代码更新您的帖子吗?您更新的代码现在可以工作了,但现在的问题是我在visual studio代码终端中得到了响应。进入邮递员或类似“127.0.0.1:3000/列表”的浏览器不会返回任何结果。感谢您的回复。您的代码会对“=>”作出反应,当删除时,它需要一个“;”。然后,块“fs.readFile”中的代码不会突出显示。我更改了您提供的代码并修改了一个litlle,但现在,它运行OK并在终端中返回列表,但在浏览器和邮递员上失败。现在它返回错误并显示“notmyroot页面”,如下代码所示:app.get('/list',(req,res)=>{let teams=[];loadTeams().then(function(data){teams=data;console.log(teams);res.send(teams);}.catch(error=>console.log(error))res.send(“我的根页面”);console.log(团队);});我修复了代码您可以再次检查它,您可以用最新的代码更新您的帖子吗?您更新的代码现在可以工作了,但现在的问题是我在visual studio代码终端中得到了响应。进入邮递员或类似“127.0.0.1:3000/列表”的浏览器不会返回任何内容。
app.get('/list', (req, res) => {
    let teams = [];
    loadTeams()
      .then(function(data){   
        teams = JSON.stringify(data); 
        console.log(teams);  
        **res.send(teams);** //intended to send to browser/postman response
        console.log('try...part ..read call');

      })
      .catch(error => console.log(error))
      res.send("My root page");
      console.log(teams);
     
});