我有一个基本的电子商务网站应用程序在本地与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]
});
}
});