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

How to redirect to route from included files

本文关键字:重定向 路由 文件 包含      更新时间:2023-09-26

我在重定向到所需JavaScript文件的不同路由时遇到问题。正如您在oauth2.js中看到的,我有一个函数validate,当调用request.post()方法的回调时会调用它。这意味着我不能将express实例化(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);

路由/登录.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?

您可以使用中间件来获取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 ..