javascript - 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 的请求,但由于某种原因它永远不会自动加载(我必须手动刷新它)。
现在另一方面,登录端点工作得很好,所以当应用程序需要写入我的硬盘驱动器(创建新的管理员用户或更新产品信息)时,问题似乎出现了
为了简单起见,我在代码中省略了验证器、中间件等。
解决方案
您需要将它们的管理产品端点设置为 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]
});
}
});
推荐阅读
- javascript - 忽略 '.' 之后的数字 正则表达式
- xml - 异常解析 XML 文件
- python-3.x - 尝试在 imx8m 迷你板上导入 pyzbar libray 时出现 OSError
- powershell - 使用目录大小修改 Powershell 计算属性
- graphql - 带有编码字符串的 URL 的 WPGraphQL 查询返回 null
- sql - SQL Server:试图做一个检查语句,但是当我在实践中尝试时遇到问题
- linux - cronjob 查找和删除子文件夹中的文件夹和文件
- r - 在 r 中的数据框中子一个模式,除非它包含另一个模式
- python - Pyinstaller - 无法执行脚本:为什么?
- python - 如何将 QComboBox 添加到 QAbstractTable 的第一行?