奇怪的行为fs.readdirSync
我使用nodejs
5.5.0和nodejs
1.0.1。 我运行脚本:
npm start
在package.json中,它被定义为:
"scripts": { "start": "pm2 start bin/www --watch" },
我有这个简单的脚本,返回一个video列表,它的工作原理:
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`));
在我看来,如果有某种延迟或caching,fs.readdirSync可以正常工作,但是如果在同一行上直接调用,则不会。
我错过了简单的事情吗?
有人纠正我,如果我错了..
但我相信这是因为res.render
有第三个参数,你不会看到这里指出的是callback
所以当你在第一个例子中创build这个variables的时候,你会阻塞,直到你得到这个variables,然后在运行时使用可用的variables来渲染这个模板。
但在第二个示例中,您正在传递该选项,但在readdirSync
可以完成填充之前readdirSync
的callback正在调用。
我想清楚了,这实际上是错过了一些非常简单的事情。 局部variables的名称是重要的 。
在情况3中,尽pipe显示没有被显式传入,但是实际上对于使用swig呈现的页面是可见的。
如果我不想介绍variables显示,我可以完成以下工作:
res.render('index', {shows: fs.readdirSync('public/videos')});