Javascript 在express app中异步执行res.render
我尝试使此路由器响应异步:Javascript 在express app中异步执行res.render,javascript,node.js,express,asynchronous,router,Javascript,Node.js,Express,Asynchronous,Router,我尝试使此路由器响应异步: var express = require('express'), router = express.Router(); router.get('/', function(req, res, next) { res.render('contact', { titleShown: true, title: 'Contact' }); }); 我试图实现我读到的async,但没有成功: var express = require('e
var express = require('express'),
router = express.Router();
router.get('/', function(req, res, next) {
res.render('contact', {
titleShown: true,
title: 'Contact'
});
});
我试图实现我读到的async
,但没有成功:
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);
});
我该怎么做
使用--跟踪同步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)
不,
res.render
不是完全异步的(目前)。因此错误实际上来自res.render
:
是的,res.render API中有同步部分(很糟糕),但是
将在Express 5.0中解决,因为没有
破坏视图引擎兼容性
使用NODE_ENV=production启动应用程序或设置
缓存为true进行渲染只会导致文件系统活动
启动时每个视图一次,这使得在
由于没有同步文件系统,应用程序完全在生产环境中运行
由于视图已缓存,因此将调用
不,
res.render
不是完全异步的(目前)。因此错误实际上来自res.render
:
是的,res.render API中有同步部分(很糟糕),但是
将在Express 5.0中解决,因为没有
破坏视图引擎兼容性
使用NODE_ENV=production启动应用程序或设置
缓存为true进行渲染只会导致文件系统活动
启动时每个视图一次,这使得在
由于没有同步文件系统,应用程序完全在生产环境中运行
由于视图已缓存,因此将调用
异步响应是什么意思?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 async');});您可能会看到“发送此静态内容”之前会出现什么“this is async”字符串,因为所有这些内容都是异步的。
这是express Handlebar模板引擎。从错误消息来看,似乎使用了fs.statSync
,这是fs.stat
的同步形式。在这种情况下为什么要使用fs.statSync
?将contact.js重命名为contact.hbs!!如果你仍然收到错误,那么问题在于你的联系人的内容异步响应是什么意思?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 async');});您可能会看到“发送此静态内容”之前会出现什么“this is async”字符串,因为所有这些内容都是异步的。
这是express Handlebar模板引擎。从错误消息来看,似乎使用了fs.statSync
,这是fs.stat
的同步形式。在这种情况下为什么要使用fs.statSync
?将contact.js重命名为contact.hbs!!如果你仍然收到错误,那么问题在于你的联系人的内容