首页 > 解决方案 > NodeJS + Express:重定向不加载端点

问题描述

我在 localhost 中使用 nodejs 和 express 开发了一个基本的电子商务 Web 应用程序,管理员必须注册,然后他们才能从产品列表中添加、编辑和删除产品。

我有以下端点:

/signup  
/signin  
/admin/products <- products list endpoint  
/admin/products/new  
/admin/products/:id/edit <- product edition endpoint

当管理员注册时,他们会自动登录并重定向到产品列表端点。

router.post('/signup',      
  async (req, res) => {       
    const {email, password, passwordConfirmation} = req.body;
    const user = await usersRepo.create({ email, password });
    req.session.userId = user.id;
    res.redirect('/admin/products');
  })

当管理员编辑产品然后单击提交按钮时,他们也会被重定向到产品列表端点。

router.post('/admin/products/:id/edit',      
  async(req, res) => {
    const changes = req.body;
    await productsRepo.update(req.params.id, changes);
    res.redirect('/admin/products');
  }
);

这是 /admin/products 端点的 get 部分的代码

router.get('/admin/products',
  async (req, res) => {
    console.log('loading products page...');
    const products = await productsRepo.getAll();
    res.send(productIndexTemplate({products}))
 });

我的问题是,当我注册新管理员或编辑产品时,应用程序几乎总是不会将我重定向到相应的端点(/admin/products),而是浏览器向我显示“无法连接”页面。但是,在这两种情况下,操作都执行得很好,创建了新的管理员帐户,并且在产品的情况下更新了更改,事实上,如果我刷新页面,它加载得很好

检查标头我可以看到有请求的标头/admin/products但没有响应标头,也没有状态代码,而在引用页面(例如/admin/products/:id/edit)的情况下,既有请求标头又有响应标头。如果我错了,请纠正我,但似乎服务器正在响应加载 /admin/products 的请求,但由于某种原因它永远不会自动加载(我必须手动刷新它)。

现在另一方面,登录端点工作得很好,所以当应用程序需要写入我的硬盘驱动器(创建新的管理员用户或更新产品信息)时,问题似乎出现了

为了简单起见,我在代码中省略了验证器、中间件等。

标签: javascriptnode.jsexpressfirefox

解决方案


您需要将它们的管理产品端点设置为 get。我只看到帖子

router.get('/', function(req, res, next) {
  // If user is already logged in, then redirect to rooms page
  if(req.isAuthenticated()){
    res.redirect('/rooms');
  }
  else{
    res.render('login', {
      success: req.flash('success')[0],
      errors: req.flash('error'), 
      showRegisterForm: req.flash('showRegisterForm')[0]
    });
  }
});

推荐阅读