我使用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的回调。

10-02 12:59