Javascript Node.js变量在函数外的使用
我正在尝试这样做,以便我可以将trends变量从其函数传递到我的Pug模板的渲染器中,但我似乎无法做到这一点Javascript Node.js变量在函数外的使用,javascript,node.js,express,webstorm,Javascript,Node.js,Express,Webstorm,我正在尝试这样做,以便我可以将trends变量从其函数传递到我的Pug模板的渲染器中,但我似乎无法做到这一点 var express = require('express'); var router = express.Router();
var express = require('express');
var router = express.Router();
var googleTrends = require('google-trends-api');
var auth = require('http-auth');
var ustrends;
var uktrends;
const Console = require('console').Console;
var basic = auth.basic({
realm: "Web."
}, function (username, password, callback) { // Custom authentication method.
callback(username === "user" && password === "pass");
}
);
var find = ',';
var regex = new RegExp(find, 'g');
googleTrends.hotTrends('US').then(function(trends){
ustrends = trends
});
googleTrends.hotTrends('EU').then(function(trends1) {
uktrends = trends1
});
console.log(ustrends);
/* GET home page. */
router.get('/', auth.connect(basic), function(req, res, next) {
res.render('index', {trends: ustrends.toString().replace(regex, ", "), trends1: uktrends.toString().replace(regex, ", "), title: 'Trends in the U.S & U.K'});
});
module.exports = router;
如您所见,我试图将“ustrends”和“uktrends”变量传递到渲染器中。感谢您的帮助 记住,
hotTrends
,因为它从谷歌的API中获取结果。由于渲染器位于回调之外,ustrends
和uktrends
被设置为值,因此不能保证在调用渲染器之前设置这些值
您可以使用多个嵌套回调,但这会导致一些代码被推到非常右边;我推荐使用这个库,它有一个名为的函数,允许您传入1)一个要按顺序执行的函数数组,以及2)一个回调,该回调将在函数完成后执行,如果有错误,它会将错误和函数的结果作为参数。在下面的代码段中,trends API在调用渲染器之前返回结果:
async.series([
function(cb) {
googleTrends.hotTrends('US').then(function(trends){
ustrends = trends;
cb();
})
},
function(cb) {
googleTrends.hotTrends('EU').then(function(trends1) {
uktrends = trends1;
cb();
});
}
], function(err, results) {
/* handle errors, do rendering stuff */
})
到底是什么引起了麻烦?在呈现的输出中,
ustrends
和uktrends
是空的还是空的,或者其他您没有预料到的东西?如果问题是变量范围,请首先尝试:router.get('/',auth.connect(basic),function(req,res,next){var resultObj;resultObj.ustrends=ustrends;resultObj.uktrends=uktrends;res.json(resultObj);}); 当您请求/url时,是否看到一个空对象?