我使用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工作正常,但如果在同一行直接调用则不行。
我是否想念一些简单的事情?
答案 0 :(得分:1)
如果我错了,有人会纠正我。
但我相信这是因为<!DOCTYPE html>
<html>
<head prefix=
"og: http://ogp.me/ns#
fb: http://ogp.me/ns/fb#
product: http://ogp.me/ns/product#">
<meta property="og:type" content="og:product" />
<meta property="og:title" content="The Smashing Pack" />
<meta property="og:description" content="A smashing pack full of items!" />
<meta property="og:image" content="http://www.friendsmash.com/images/pack_600.png" />
<meta property="og:url" content="http://www.friendsmash.com/og/smashingpack.html" />
<meta property="product:price:amount" content="2.99"/>
<meta property="product:price:currency" content="USD"/>
<meta property="product:price:amount" content="1.99"/>
<meta property="product:price:currency" content="GBP"/>
</head>
</html>
有第三个参数,你不知道哪个是res.render
noted here
因此,当您在第一个示例中创建变量时,将阻塞直到获得变量,然后使用运行时可用的变量渲染模板。
但是在你的第二个例子中,你传递了这个选项,但是callback
的回调是在res.render
完成填充之前调用的。
答案 1 :(得分:1)
我想通了,实际上我错过了一些非常简单的东西。 本地变量的名称为重要。
在案例3中,虽然未明确传入节目,但实际上使用swig呈现的页面可以看到它。
如果我不想介绍变量节目,我可以完成以下工作:
res.render('index', {shows: fs.readdirSync('public/videos')});