如何从包含的文件重定向到路由

时间:2015-06-21 19:31:53

标签: javascript node.js express

我无法从必需的JavaScript文件重定向到不同的路线。正如您在oauth2.js中看到的,我有一个函数 validate ,当调用request.post()方法的回调时,会调用该函数。这意味着我无法将express-instantiation(app)作为参数传递。

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
}

如何从validate方法重定向到/login.html?

1 个答案:

答案 0 :(得分:1)

您可以使用中间件来获取express的响应对象,并在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 ..