我正在构建一个端点/ 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一起使用。
有人可以指导我哪里出问题了吗?
答案 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”。如果不使用缓冲区,它将返回一个缓冲区,而不是字符串。