【发布时间】:2016-05-03 12:56:43
【问题描述】:
在我的 node.js express 应用程序中,我使用以下代码将 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 - -
有人可以帮助编写这个真正异步的函数吗?
【问题讨论】:
-
Upps,这也是我不久前的问题... :) 没有我的 fsAsync 函数出现的错误显示在控制台中的
res.render,这不是异步模块(现在) . -
所以可能这也是导致此错误的原因,只是“fsAsync”部分欺骗了我。
-
哈哈看到同一个头像))) 反正是快递问题,和你的代码无关。您的 func 在堆栈上,因为您正在从中调用
render。
标签: javascript node.js express asynchronous