【问题标题】:Node JS redirects give me a bunch of html textNode JS 重定向给了我一堆 html 文本
【发布时间】:2014-09-17 02:46:30
【问题描述】:

想问一个关于 nodeJS 重定向和渲染的问题。

app.js

在我的 app.js 中,我有这些代码,效果很好。

app.get('/dashboard', routes.dashboard);
app.get('/error/404', error.notFound);

然后,深入研究方法

error.notFound

当你从 URL 加载它时效果也很好

exports.illegal = function(req, res){
    var authLevel = '';
    var entityName = '';
    var entityId = '';
    var deviceId = '';

    if (req.session.authorizationLevel) authLevel = req.session.authorizationLevel;
    if (req.session.name) entityName = req.session.name;
    if (req.session.entityId) entityId = req.session.entityId;
    if (req.session.deviceId) deviceId = req.session.deviceId;

    res.render('error/illegal', {
        title: 'Illegal'
        , viewClass: 'illegal'
        , ngController : ''
        , entityName : entityName
        , entityId : entityId
        , deviceId : deviceId
        , authorizationLevel : authLevel
    });
};

routes.dashboard

当你从 URL 加载它时效果也很好

exports.dashboard = function(req, res){
    //Method for authorization, see below. This is giving me error.
    authorizationHelper.authorizationLevels(req, res, 400);

    var authLevel = '';
    var entityName = '';
    var entityId = '';
    var deviceId = '';

    if (req.session.authorizationLevel) authLevel = req.session.authorizationLevel;
    if (req.session.name) entityName = req.session.name;
    if (req.session.entityId) entityId = req.session.entityId;
    if (req.session.deviceId) deviceId = req.session.deviceId;

    res.render('dashboard', {
        title: 'Dashboard'
        , viewClass: 'dashboard'
        , ngController: 'dashboardController'
        , entityName : entityName
        , entityId : entityId
        , deviceId : deviceId
        , authorizationLevel : authLevel
    });

};

这是给我一些错误的棘手部分。

    //Method for authorization, see below. This is giving me error.
    authorizationHelper.authorizationLevels(req, res, 400);

授权助手

此方法将检查是否允许用户查看页面,否则将重定向

exports.authorizationLevels = function(req, res, levelRequired){
    if (req.session.authorizationLevel < levelRequired || !req.session.authorizationLevel){
        //user is not allowed to view the page, redirect to illegal page
        res.redirect('/error/401');
    }
}

问题是,从顶部到这个 res.redirect('/error/401') 一切正常,有时,在服务器上,它不会呈现页面,而是会呈现一大堆 HTML文本和一些标题!!

请帮忙!

【问题讨论】:

  • HTML 是否显示您的dashboard 模板?
  • 是的,这是我的仪表板模板。我正在使用 express-ejs-layout 进行渲染。

标签: javascript node.js redirect render


【解决方案1】:

你可以改变

exports.authorizationLevels = function(req, res, levelRequired) {
  if (req.session.authorizationLevel < levelRequired || !req.session.authorizationLevel){
      //user is not allowed to view the page, redirect to illegal page
      res.redirect('/error/401');
  }
}

exports.authorizationLevels = function(req, res, levelRequired) {
  if (req.session.authorizationLevel < levelRequired || !req.session.authorizationLevel){
      //user is not allowed to view the page, redirect to illegal page
      res.redirect('/error/401');
      return false;
  }
  return true;
}

authorizationHelper.authorizationLevels(req, res, 400);

if (!authorizationHelper.authorizationLevels(req, res, 400))
  return;

这将阻止您的仪表板在未经授权的访问时呈现。

另外,您可能会考虑集中您的错误处理,以便您只需安装一个错误处理程序中间件 ((err, req, res, next)) 并在那里进行错误模板呈现(同时在您的路由处理程序中简单地执行 next(401); 等错误),除非您希望他们在浏览器中看到 /error/401 和此类 URL。

【讨论】:

    猜你喜欢
    • 2015-11-22
    • 2016-09-07
    • 1970-01-01
    • 2011-01-09
    • 2021-02-10
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多