Node.js异步等待快递

时间:2018-11-20 08:47:00

标签: javascript node.js express async-await

我正在构建一个端点/ 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:意外令牌(

     

在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)在try.ModuleLoad的Module.load(module.js:487:32)   (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)

我将npm 3.10.10与节点v6.11.3一起使用。

有人可以指导我哪里出问题了吗?

2 个答案:

答案 0 :(得分:3)

Async/await is only available in Node versions 8 an up。如果可能,请尝试使用较新的Node版本。

答案 1 :(得分:0)

代替呼叫:

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”。如果不使用缓冲区,它将返回一个缓冲区,而不是字符串。