node.js - 快速服务器重定向问题

标签 node.js reactjs express next.js

我正在使用 React 和 Express 构建/学习一个网络应用程序。所有路由和重定向都有效,但 URL 不会更改,并且我的 props 不会通过,直到我手动转到 URL。

例如;

成功登录(使用 MongoDB 的本地护照)后,它会呈现主页,但它是空的,因为我没有获得任何数据(用户 ID 或电子邮件等),但如果手动输入 URL 或按导航栏上的主页按钮,它会工作,或者如果我注销它会注销,但 URL 保留在/logout 而不是/login。示例代码如下:

server.js

...
server.use((req, res, next) => {
  res.locals.success_msg = req.flash("success_msg");
  res.locals.error_msg = req.flash("error_msg");
  res.locals.error = req.flash("error");
  res.locals.messages = req.flash();
  res.locals.user = req.user;
  next();
});

server.get("/index", ensureAuthenticated, (req, res) => {
  const msg = {name: req.user.name, email: req.user.email};
  return app.render(req, res, "/index", msg);
});

server.post("/login", (req, res, next) => {
  passport.authenticate("local", function(err, user, info) {
    if (err) {
      return next(err);
    } else if (!user) {
      req.flash("error_msg", info.message);
      return app.render(req, res, "/login", req.flash());
    } else {
      req.logIn(user, function(err) {
        if (err) {
          return next(err);
        }
        req.user = user.name;
        return app.render(req, res, "/index", user.name);
      });
    }
  })(req, res, next);
});

server.get("/logout", (req, res) => {
  req.logOut();
  req.flash("success_msg", "done!");
  return app.render(req, res, "/login", req.flash());
});

server.get("*", ensureAuthenticated, (req, res) => {
  return handle(req, res);
});

最佳答案

我认为您的登录方法中的 return app.render(req, res, "/index", user.name); 的意思实际上是重定向

渲染的作用是获取文件和您提供的数据,然后将其作为响应发送回浏览器。

但是,您想要做的是让用户在登录过程成功时转到不同的 URL,这可以通过执行以下操作来完成:

res.redirect('/index')

这将使服务器转到您的 index 路由,该路由又执行加载用户数据所需的所有代码!

您可以了解更多关于redirect的信息和 render通过查看 Express 文档。

关于node.js - 快速服务器重定向问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55910666/

相关文章:

node.js - 如何使 multer 正确解析使用表单数据发送的客户端请求?

javascript - Mongoose保存返回正确的保存对象,但它没有保存到数据库

reactjs - Material 界面 : Change theme color by SASS variables

javascript - react : Uncaught TypeError between parent and child

express - 像 swagger/swashbuckle 但对于 node.js?

javascript - Node.js 集群与多个 Docker 容器

java - 在 QTest Pulse 测试管理工具中,无法将测试场景链接到需求

reactjs - 用 Jest 测试时如何选择dom

node.js - res.render 不呈现 View ,返回 html 文本

javascript - 在 Angular-fullstack 上用 ui-router 替换 ng-router