Node.js Асинхронное ожидание в экспресс - PullRequest
0 голосов
/ 20 ноября 2018

Я создаю конечную точку / 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) в Module._compile (module.js: 542: 28) в Object.Module._extensions..js (module.js: 579: 10) в модуле.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)

Я использую npm 3.10.10 с узлом v6.11.3.

Может кто-нибудь подсказать, где я ошибся?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Асинхронное / ожидание доступно только в версиях Node 8 и выше .Попробуйте по возможности использовать более новую версию Node.

0 голосов
/ 20 ноября 2018

Вместо звонка:

return eval(user);

Вам следует позвонить:

res.send(JSON.parse(user));

или

res.send(JSON.stringify(JSON.parse(user)));

и используйте промежуточное программное обеспечение bodyParser.json () при возврате объекта.

Аналогично в блоке перехвата,

res.status(500).send(‘there was an error’);

и зарегистрируйтеошибка в вашей консоли.

——-

Кроме того, fs.readFile принимает другой параметр - кодировку.Используйте utf-8.Он возвращает буфер, а не строку, если вы его пропустите.

...