【发布时间】:2016-07-16 21:31:54
【问题描述】:
我尝试让这个路由器响应异步:
var express = require('express'),
router = express.Router();
router.get('/', function(req, res, next) {
res.render('contact', {
titleShown: true,
title: 'Contact'
});
});
我尝试实现async,我读到过关于here,但没有工作:
var express = require('express'),
router = express.Router(),
async = require('async');
router.get('/', function(req, res, next) {
async.parallel([
res.render('contact', {
titleShown: true,
title: 'Contact'
})
], req);
});
我该怎么做?
使用--trace-sync-io 标志时收到的错误消息:
WARNING: Detected use of sync API
at fs.statSync (fs.js:892:18)
at tryStat (C:\www\node\website\node_modules\express\lib\view.js:169:15)
at resolve (C:\www\node\website\node_modules\express\lib\view.js:142:14)
at lookup (C:\www\node\website\node_modules\express\lib\view.js:110:17)
at View (C:\www\node\website\node_modules\express\lib\view.js:85:20)
at render (C:\www\node\website\node_modules\express\lib\application.js:569:12)
at render (C:\www\node\website\node_modules\express\lib\response.js:961:7)
at C:\www\node\website\routes\contact.js:9:7
at handle (C:\www\node\website\node_modules\express\lib\router\layer.js:95:5)
【问题讨论】:
-
异步响应是什么意思?
-
contact.js 中的第 9 行第 9 列是
res.render,这就是为什么我认为它不是异步的。我用错误消息更新了我的问题。 -
res.render 已经是异步的。如果你这样做:
router.get('/', (req, res, next) => { res.render('contact', {title: 'contact'}, (err, html) => { console.log('sent this static stuff'); }); console.log('this is async'); }); you can probably see what 'this is async' string can appear before 'sent this static stuff' because all this stuff is async. -
它是 express-handlebars 模板引擎。从错误消息看来,使用
fs.statSync是fs.stat的同步形式。为什么在这种情况下使用fs.statSync表达? -
将contact.js重命名为contact.hbs !!如果你仍然得到错误,那么问题在于你的联系内容
标签: javascript node.js express asynchronous router