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 use eval 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 异步等待快递的主要内容,如果未能解决你的问题,请参考以下文章

在 Node.js 中等待异步函数返回

异步/等待 Discord.js Node.js Javascript JS

Node.js mongodb 驱动程序异步/等待查询

Node.js/Mongoose 等待异步 For 循环

node.js异步多个等待不适用于用户注册

将 Node.js 流错误事件传播到异步等待样式代码