Node.js 我的node js程序给了我一个;TypeError:无法读取属性';然后';对于未定义的“;,读取json文件时
我试图用我的程序读取frpm一个json文件夹,我想使用GET list端点通过浏览器或邮递员读取,但是我得到了上面的TypeError。这是我的密码: model.js: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) =>
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);
});