我正在研究一种采用这种简单形式的Nodejs API客户端:
//client.js
function Client (appId, token) {
if (!(this instanceof Client)) {
return new Client(appId, token);
}
this._appId = appId;
this._token = token;
...
}
Client.prototype.save = function (data,callback) {
return this_request(...);
}
Client.prototype._request = function (method, url, data, callback) {
//do stuff
}
module.exports = Client
我现在想在Expressjs路由中使用auth
函数作为中间件,但我不确定如何将该函数集成到client.js
。
var myModule = require('myModule');
var thingy = myModule("12345", 'abcde');
router.get('/protectedRoute', thingy.auth, function(req, res, next){
}
例如,应该将函数定义为prototype
的一部分,如下所示:
Client.prototype.auth = function(req,res,next) {
//do stuff
}
任何指针和建议都非常赞赏。
答案 0 :(得分:0)
因此中间件的实现方式是,您必须为其传递函数,然后使用req
res
和next
进行调用。当您采用OOP方法并使auth
成为对象的原型方法时,当通过express调用该函数时,它将具有不同的this
范围,因此可能会抛出错误。您需要使用bind
创建一个将特定范围绑定到该函数的函数,然后将其传递给express。
router.get('/protectedRoute', thingy.auth.bind(thingy), function(req, res, next){
}
可替换地:
var authMiddleware = function(req, res, next) {
thingy.auth(req, res, next);
}
router.get('/protectedRoute', authMiddleware, function(req, res, next){
}