我使用nodejs
5.5.0和pm2
1.0.1。我使用以下命令运行脚本:
npm start
在package.json中,它定义为:
"scripts": {
"start": "pm2 start bin/www --watch"
},
我有这个简单的脚本,可以返回视频列表,并且可以正常工作:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
const fs = require('fs');
shows = fs.readdirSync(`public/videos`);
res.render('index', shows);
});
module.exports = router;
但是我观察到了一些有趣的事情……如果进行以下修改,它将不再起作用,并返回一个空列表:
//shows = fs.readdirSync(`public/videos`);
res.render('index', fs.readdirSync(`public/videos`));
为了使它更有趣,可以进行以下工作:
shows = fs.readdirSync(`public/videos`);
res.render('index', fs.readdirSync(`public/videos`));
在我看来,如果存在某种延迟或缓存,则fs.readdirSync可以正常工作,但是如果直接在同一行上调用则不能。
我错过了一些简单的事情吗?
最佳答案
如果我错了,有人纠正我。
但是我相信这是因为res.render
有第三个参数,您看不到哪个是callback
noted here
因此,在第一个示例中创建变量时,将阻塞直到获得变量,然后使用运行时可用的变量渲染模板。
但是在第二个示例中,您传递了该选项,但是在res.render
完成填充之前,正在调用readdirSync
的回调。