【问题标题】:Node.js async await in expressNode.js 异步等待快递
【发布时间】: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 语法。更新它。

标签: javascript node.js express 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”。如果你忽略它,它会返回一个缓冲区,而不是一个字符串。

【讨论】:

    猜你喜欢
    • 2018-07-24
    • 2021-03-26
    • 1970-01-01
    • 2019-01-15
    • 2021-08-28
    • 2021-04-25
    • 2014-04-28
    • 2019-01-13
    • 2020-08-01
    相关资源
    最近更新 更多