2016-03-29 6 views
0

で非同期にres.render実行私はこのルータ応答非同期をしようと急行アプリ

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) 
+0

あなたは非同期応答によって何を意味していますか? – gmaliar

+0

contact.jsの9行目の9行目は 'res.render'です。そのため、非同期ではないと思ったのです。私はエラーメッセージで質問を更新しました。 – Lanti

+1

res.renderはすでに非同期です。 : 'router.get( '/'、(req、res、next)=> { res.render( '連絡先'、{タイトル: '連絡先'}、(エラー、html)=> { console.log( 'この静的なものを送信しました'); }); console.log( 'this is async'); }); 「これは非同期です」という文字列は、「この静的なものを送信しました」の前に表示される可能性があります。これはすべてasync.です。 – Syberic

答えて

1

いいえ、res.renderは(現時点では)完全に非同期ではありません。だから、エラーが本当にres.renderから来ている:

はい、res.renderのAPI(吸う)のシンク部分があるが、我々は 壊すことなく、それに対処することができないとして、それは は、エクスプレス5.0で解決されますビューエンジンの互換性。

NODE_ENV =生産またはレンダリングのためにtrueに キャッシュを設定してアプリケーションを起動するには、 アプリケーションは完全に生産で実行されている間、この非問題になり、起動、時だけ ビューごとに1回、ファイルシステムアクティビティが発生しますなぜなら、ビューがキャッシュされるので、同期ファイルシステム が呼び出されないからです。

Source

関連する問題