2015-09-12 4 views
1

Я работаю на клиенте API Nodejs, который принимает эту простую форму:Expose Expressjs промежуточного программного клиента 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 

Я хотел бы теперь сделать auth функции доступна как промежуточный в Expressjs маршрутов, но я не уверен, как интегрировать функцию в 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

Таким образом, промежуточное программное обеспечение реализовано, это то, что вам нужно передать функцию для него, а затем вызвать с помощью reqres и next. Поскольку вы приняли подход ООП и сделали auth прототипом метода для объекта, когда эта функция вызывается экспресс, у него будет разная область this, и, таким образом, вероятность ошибки будет вызываться. Вы должны использовать bind для создания функции, которая связывает конкретную область с этой функцией, а затем передает ее для выражения.

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){ 

} 
Смежные вопросы