Why is this exported function in NodeJS not working as I want it to?
我试图让下面的代码作为中间件从导出的函数中运行。
1 2 3 | fs.stat("./tmp/my_data.json", (err, stats) => { scraperDate = stats.mtime.toUTCString(); }); |
我有
1 | let scraperDate =""; |
在我的路线文件顶部。我正在尝试这样做:
1 2 3 | router.get("/", myFunctions.scraperDateFunction, function (req, res) { res.render("my_view", {scraped: scraped, scraperDate: scraperDate}); }); |
当我在路线上方按原样运行 scraperDate 代码时,它可以工作。当我将它放在我的functions.js 文件到module.exports 中时,它不会写入scraperDate 变量。
我可能在这里遗漏了一些明显的东西,但我已经尝试让它在两天的大部分时间里工作。这是我的 module.exports 函数:
1 2 3 4 5 6 7 | module.exports = { scraperDateFunction: function(){ fs.stat("./tmp/my_data.json", (err, stats) => { scraperDate = stats.mtime.toUTCString(); }); } } |
* 编辑 *
我现在已经试过了
1 2 3 4 5 6 7 8 | getScrapeDate: function(req, res, next){ fs.stat("./tmp/my_data.json", (err, stats) => { scraperDate = stats.mtime.toUTCString(); console.log(err) console.log(stats) return next; }); } |
按预期打印
* 编辑 2 *
现在我的函数文件中有这个
1 2 3 4 5 6 7 8 9 10 | getScrapeDate: function(req, res, next){ fs.stat("./tmp/my_data.json", (err, stats) => { if (err) { next (err); } else { res.locals.scraperDate = stats.mtime.toUTCString() } }); } |
按照建议在我的路线文件中,但它不会加载我的视图
1 2 3 4 5 | router.get("/", myFunctions.getScrapeDate, function (req, res) { let {scraperDate} = res.locals; res.render("my_view", {scraped: scraped, scraperDate: scraperDate}); }); |
scraped 在路由文件的顶部声明。
* 最终编辑 *
这是一个正在运行的设置
1 2 3 4 | router.get("/", myFunctions.getScrapeDate, function (req, res) { let {scraperDate} = res.locals; res.render("my_view", {scraped, scraperDate}); }); |
和
1 2 3 4 5 6 7 8 9 10 | getScrapeDate: function(req, res, next){ fs.stat("./tmp/my_data.json", (err, stats) => { if (err) { next (err); } else { res.locals.scraperDate = stats.mtime.toUTCString(); next(); } }); } |
不要在你的函数模块顶部定义
您应该按照此建议使用
在中间件之间传递数据
在你的路由文件中:
1 2 3 4 5 6 | router.get('/', myFunctions.scraperDateFunction, (req, res) => { const { scraperDate } = res.locals; // the following is shorthand in ES2015 syntax for // { scraped: scraped, scraperDate: scraperDate } res.render('my_view', { scraped, scraperDate }); }); |
在你的函数文件中:
1 2 3 4 5 6 7 8 9 10 11 12 | module.exports = { scraperDateFunction (req, res, next) { fs.stat('./tmp/my_data.json', (err, stats) => { if (err) { next(err); } else { res.locals.scraperDate = stats.mtime.toUTCString(); next(); } }); } } |
同样,不要尝试在函数文件中定义和导出顶级
模块中
查看参考文档。