在我的node.js express app中,我使用以下代码将json文件的内容读取到我的路由器:
lib/functions.js
:
'use strict';
const fs = require('fs');
exports.fsAsync = (callback) => {
fs.readFile(__dirname + '/../database/data.json', 'utf8', (err, data) => {
if(err) {
throw callback(err)
};
callback(null, JSON.parse(data)); // null means no error, return results in callback
});
};
在这样的路由器中调用:
routes/contact.js
:
'use strict';
const express = require('express'),
router = express.Router();
const functions = require('../lib/functions'),
fsAsync = functions.fsAsync;
router.get('/', (req, res, next) => {
fsAsync((err, data) => {
if (err) {
return res.render('404', {
title: 'Error 404'
});
}
const contact = data[2].contact;
res.render('contact', {
title: 'Contact',
data: contact
});
});
});
module.exports = router;
但是我在控制台中出现了同步错误:
(node:12808) WARNING: Detected use of sync API
at fs.statSync (fs.js:981:18)
at tryStat (C:\www\node\site\node_modules\express\lib\view.js:169:15)
at resolve (C:\www\node\site\node_modules\express\lib\view.js:142:14)
at lookup (C:\www\node\site\node_modules\express\lib\view.js:110:17)
at View (C:\www\node\site\node_modules\express\lib\view.js:85:20)
at render (C:\www\node\site\node_modules\express\lib\application.js:569:12)
at render (C:\www\node\site\node_modules\express\lib\response.js:961:7)
at fsAsync (C:\www\node\site\routes\contact.js:23:9)
at fs.readFile (C:\www\node\site\lib\functions.js:18:5)
GET /en/contact 304 154.638 ms - -
有人可以帮助写这个函数真正异步吗?
答案 0 :(得分:0)
为什么不直接使用fs.readFileSync()
?
例如:
var content = fs.readFileSync("file.json", "utf8");
答案 1 :(得分:0)
因为您使用的是.json
文件,所以可以使用
require
也可以解析JSON。
var myDataObj = require('path_to/data.json');
此外,您可以将此要求放在文件的顶部,并在路由中使用myDataObj
,这样您就不会在每个请求中读取data.json
文件,它将充当缓存。< / p>