NodeJS+Express:重定向不会加载端点



我有一个基本的电子商务网站应用程序在本地与nodejs和express开发,管理员必须注册,然后他们可以添加,编辑和删除产品列表中的产品。

我有以下端点:

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

当admins注册时,他们将自动登录并重定向到产品列表端点。

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的请求,但由于某种原因,它从未自动加载(我必须手动刷新它)。

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

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

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

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]
});
}
});

最新更新