javascript - 使用express.js 打破程序流程

标签 javascript node.js express

我想知道打破程序流程并重定向到某个路由的正确方法是什么。

类似于 header 重定向,但使用路由名称而不是完整的 URL。

这相当common to be found in PHP frameworks而且相当强大,但我还没有找到使用express.js 的方法。

想象一下这个场景:

function getUser() {
    //...
    //getting user..

    //Here I would like to break the flow of the program
    if (error) {
        res.redirect('add');
    }

    //If there was no error we keep the normal flow
    //...
}


router.get('/add', function (req, res, next) {
    var user = getUser();
    var date = //whatever
    var type = //whatever

    var event = createEvent(user, date, type);

    res.render('add', {
        date: date,
        type: type,
        whatever: whatever,
        csrfToken: req.csrfToken(),
        message: req.flash('error')
    });
});

正常的渲染不会是我想要的,因为我不想再次获取渲染 View 所需的所有变量,我希望我想要重定向的路由来处理它。

我正在考虑使用 writeHead,但这需要整个 URL,而不仅仅是路由 URL。

有什么想法或建议吗?

最佳答案

您可以从 getUser() 返回 falsenull 或其他一些值来指示中断。或者检查响应的状态(例如检查 res._headerSent === trueres.finished === true)。

另一种可能性可能是考虑使 getUser() 成为中间件函数。示例:

function getUser(req, res, next) {
  // ...

  if (error)
    return res.redirect('add');

  // If there was no error we keep the normal flow
  // ...

  // you would add user data to `req` here instead of returning it
  req.user = ...

  next();
}

router.get('/add', getUser, function(req, res, next) {
    var user = req.user;
    var date = //whatever
    var type = //whatever

    var event = createEvent(user, date, type);

    res.render('add', {
      date: date,
      type: type,
      whatever: whatever,
      csrfToken: req.csrfToken(),
      message: req.flash('error')
    });
});

关于javascript - 使用express.js 打破程序流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26909540/

相关文章:

javascript - 在 React JS 的文本字段中打印 JSON 数据

php - 使用 PHP 和 JavaScript 读取 blob 数据

javascript - 使用带有 NodeJS 的 Handlebars 进行模板化以包含布局

javascript - 多主题网站

javascript - 选择窗口 html

javascript - 为什么 `(console.error = console.trace)();` 在 Node.js 中会变成 `heap out of memory`?

Azure 网站上的 Node.js 404 错误

node.js - Mocha 单元测试 Mongoose 模型

node.js - ejs 2 自定义分隔符

javascript - 在console.log中显示查询的[object Object]字段