【问题标题】:URL does not change with res.render()URL 不会随 res.render() 改变
【发布时间】:2020-07-15 15:05:55
【问题描述】:

我需要在使用 expressjs 从服务器登录到 ejs 模板引擎后发送应用程序列表。为此,我使用res.render()。即使它呈现指定的文件,它也不会更改 url。我应该怎么做才能与数据一起重定向并更改 url。

routes.js

const loginUser = requie('../Controller/LoginController');
router.post('/login', loginUser);

LoginController.js

const loginUser = (req, res) => {
    /* login code */
   res.render('apps/app-list', {
     title: 'Application List',
     isLoggedIn: true
   });
};

登录成功后,正在渲染apps/app-list的内容,但url还是users/login

【问题讨论】:

  • 我认为这个问题应该回答你的stackoverflow.com/questions/39620470/… 基本上,如果你想改变你应该使用 res.redirect() 的 url 并传递你应该使用会话的对象。我用的是connect-flash,这里是链接npmjs.com/package/connect-flash
  • 如何使用req.flash() 发送多个值? @Cortoloman
  • 我想将get请求的数据连同ifLoggedIn一起发送到ejs模板。我怎样才能做到这一点? @Cortoloman
  • @SujayPrabhu 你实现了在ejs模板中使用渲染时如何消费数据吗?

标签: node.js express ejs


【解决方案1】:

如果您尝试发送数据,您应该呈现一个页面,这是我的应用程序中的一个示例:

app.get("/myfood", ensureAuthenticated, (req, res) => {
    Food.find({}, (error, allfood) => {
        if(error) {
            console.log(error)
        } else {
            res.render("myfood", {food: allfood})
        }
    })
})

所以我将通过获取请求发送所有找到的食物。您可以发送多个对象。只需用逗号分隔它们即可。

正如我在评论中所说,如果你愿意,你不能这样做

res.redirect()

因此,在我的应用中,我想在用户注册时发送一条消息。这里:

newUser.save()
  .then(user => {
       req.flash("sucess_msg", "Thank you for registering.")
       res.redirect("/login");
  })

您可以在 YouTube 上搜索一下如何使用 req.flash() ,这里有一些很棒的教程。我是从护照节点应用 Brad Traversy 那里了解到的。

这就是我能给你的一切。 req.flash() 定义在全局变量中

app.use((req, res, next) => {
    res.locals.sucess_msg = req.flash("sucess_msg");
    res.locals.error_msg = req.flash("error_msg");
    res.locals.error = req.flash("error");
    next();
});

尝试做同样的事情,也许从那里开始。希望你能更近一步

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2020-01-25
    • 2022-12-28
    • 2016-09-09
    相关资源
    最近更新 更多