Node.js 异步等待快递
Posted
技术标签:
【中文标题】Node.js 异步等待快递【英文标题】:Node.js async await in express 【发布时间】:2019-04-22 16:08:58 【问题描述】:我正在构建一个端点 /users,它将返回 Users.json 文件中的内容。我正在使用 aysnc/await 功能。
var express = require('express');
var app = express();
var fs = require('fs');
var readFile = Promise.promisify(fs.readFile);
const util = require('util');
app.get('/users', async (req, res, next) =>
try
const user = await readFile('./users.json');
return eval(user);
//res.send(JSON.parse(data));
// res.json(user);
catch (e)
//this will eventually be handled by your error handling middleware
next(e)
);
app.listen(3000,function()
console.log("listening on port 3000");
);
这会引发以下错误
SyntaxError: Unexpected token (
在 CreateScript (vm.js:56:10) 在 Object.runInThisContext (vm.js:97:10) 在 Object.Module._extensions..js 的 Module._compile (module.js:542:28) (module.js:579:10) 在 Module.load (module.js:487:32) 在 tryModuleLoad (module.js:446:12) 在 Function.Module._load (module.js:438:3) 在 Module.runMain (module.js:604:10) 在运行 (bootstrap_node.js:389:7) 在 启动(bootstrap_node.js:149:9)
我正在使用带有节点 v6.11.3 的 npm 3.10.10。
有人可以指导我哪里出错了吗?
【问题讨论】:
Never ever useeval
to parse JSON! 在 node.js 中,JSON.parse
始终可用。
什么是Promise.promisify
?你的意思是util.promisify
?
使用您发布的代码我没有收到任何错误。
是的。我的意思是 util.promisify(),但我想这不会导致这个问题。 @Bergi 除了 util.promisify 是否有任何代码更改?我仍然遇到同样的错误
看起来 node v6.11.3 不支持 async
/await
语法。更新它。
【参考方案1】:
Async/await is only available in Node versions 8 an up。如果可能,请尝试使用更新的 Node 版本。
【讨论】:
应该是 8 版。Nodejs 7.5 只支持带有和谐标志的异步等待 谢谢.. 将节点版本升级到 v10.13.0 后确实有效【参考方案2】:而不是调用:
return eval(user);
你应该打电话:
res.send(JSON.parse(user));
或
res.send(JSON.stringify(JSON.parse(user)));
如果返回一个对象,则使用 bodyParser.json() 中间件。
在 catch 块中也是如此,
res.status(500).send(‘there was an error’);
并将错误记录到您的控制台。
——-
另外,fs.readFile 接受另一个参数,编码。使用“utf-8”。如果你忽略它,它会返回一个缓冲区,而不是一个字符串。
【讨论】:
以上是关于Node.js 异步等待快递的主要内容,如果未能解决你的问题,请参考以下文章