请教Express中变量传递的问题
发布于 10 年前 作者 xuyuan923 5087 次浏览 最后一次编辑是 8 年前 来自 问答

学艺不精,请教问题,先谢谢了。 希望实现如下功能,exports.b中获取到exports.a中的变量。 路由是这样的:

app.get('/a',Model.a);
app.get('/b',Model.b);

控制器是这样的:

exports.a = function(req,res){
	var q = req.query.q;
	// ...
	res.render('xxx.jade',{})
}
exports.b = function(req,res){
	//求指导
	//希望在这里获取到exports.a里的q变量
	// ...
	res.json()
}

如果是普通的js中,实现a()函数中传递变量到b()函数是非常容易的,可以这样做:

function a(){
	var q = 'xxx';
	this.b(q);
}
function b(q){
	// console.log(q) => 'xxx'
}
7 回复

瓜皮来解答一下吧

闭包啊

把q申明到 export外面

@captainblue2013 艹你。。。。

module.exports 就提示到这。

@MiguelValentine 其实是题主没说的很明确啦

你应该将 exports.a = function(req,res){ var q = req.query.q; //return q; } 中的q return,要不然就算给q赋值了也没用,a函数没起什么实质作用

@duoduoyi 我这应用场景比较特殊,在不同路由下获取渲染不同的页面。不能用闭包,将b()包在a()里面。 路由是这样的的

app.get('/a',Model.a);
app.get('/b',Model.b);

控制器是这样的,

exports.a = function(req,res){
	var q = req.query.q;
	// ...
	res.render('xxx.jade',{})
}
exports.b = function(req,res){
	//需要exports.a里的变量q
	// ...
	res.json()
}

@xuyuan923 不理解路由 /a和/b为啥要耦合起来。 难道req.query.q 是一个类似于apiKey的东东?用户只传一次apiKey, 后续的访问要检查这个apiKey? 如果是类似这样的场景,我能想到的是在/a时把这个apiKey放到session的数据库里面,然后/b路由时根据session id从session数据库读取。

回到顶部