2015-06-21 1 views
0

У меня возникли проблемы с перенаправлением на другой маршрут из требуемого файла JavaScript. Как вы видите в oauth2.js, у меня есть функция validate, которая вызывается, когда вызывается обратный вызов метода request.post(). Это означает, что я не могу передать экспресс-экземпляр (приложение) в качестве параметра.Как перенаправить на маршрут из включенных файлов

server.js

var app = require('express); 
var login = require('./routes/login'); 
app.use('/login', login); 

var oauth2 = require('./oauth2'); 
oauth2.auth(); 

app.get('/login', function(req, res) { 
    res.sendFile('./public/login.html', { root: __dirname }); 
}); 

app.listen(8080); 

маршруты/login.js

var express = require('express'); 
    var router = express.Router(); 
    module.exports = function(){ 
     router.get('/login', function(req, res){ 
      console.log('Logging in...'); 
     } 
     return router; 
    } 

oauth2.js

... 
var request = require('request'); 
request.post({ 
    uri: uri, 
    headers:headers, 
    body:data 
}, validate); 

function validate(err, res, body){ 
    ... 

    // REDIRECT TO /login.html 
} 

Как можно перенаправить в /login.html из метода валидации?

ответ

1

Вы можете использовать промежуточный программное обеспечение, чтобы захватить объект ответа курьерских и использовать его, когда oauth2 возвращает результат:

var app = require('express); 
var login = require('./routes/login'); 
app.use('/login', login); 

var oauth2 = require('./oauth2'); 

app.use(function (req, res, next) { 
    oauth2.auth(function (err, res, body) { 
    // validate 
    res.redirect('/login'); 
    }); 
}); 

app.get('/login', function(req, res) { 
    res.sendFile('./public/login.html', { root: __dirname }); 
}); 

и ваш oauth2.js должен получить обратный вызов:

// some code.. 

function auth (cb) { 
    // some code .. 
    request.post({ 
     uri: uri, 
     headers:headers, 
     body:data 
    }, cb); 
    // some code .. 
} 

// some code ..