Web应用程序路由新手在这里。我有一个基于Node / Express的相对简单的应用程序。
应用程序的主索引是用户名和ID列表。
localhost:242
每个用户ID都是指向带有表单的页面的链接,用于输入有关该特定用户的其他元数据。
localhost:242/user/1398
一切正常。当我输入关于用户的一些元数据并提交表单时,会执行POST路由,然后我将重定向回到我所在的原始页面。我不想使用重定向,而是希望能够重新呈现相同的页面,因此我可以传递一些确认消息,指出刚刚更改的内容。
这是我的代码的简化版本。
// Module imports
var express = require('express');
var validator = require('express-validator');
var router = express.Router();
router.get('/', function(req, res, next) {
db.dataTalk(queryUsers, null, config.connection, function(err, result) {
var listUsers = result;
res.render('index', {
// Index with list of users
title: 'Page Title',
listUsers: listUsers
});
});
});
// GET /user/:id
router.get('/user/:id', function(req, res, next) {
db.dataTalk(queryUserDeets, [req.params.id], config.connection, function(err, result) {
// Details for a single user
var userDetails = result;
res.render('user', {
title: req.params.id,
userDetails: userDetails
});
});
});
// POST /user-update
router.post('/user-update', function(req, res) {
// Here goes a lot of logic to validate the form contents, and update the appropriate databases
// Redirect back to the user page, which should display the updated metadata
res.redirect('/user/' + req.body.userInitID);
});
module.exports = router;
答案 0 :(得分:1)
提取可以从两个地方调用的辅助函数。这是一个非常接近你的原始代码。
function renderUserPage (userId, res) {
db.dataTalk(queryUserDeets, [userId], config.connection, function(err, result) {
// Details for a single user
var userDetails = result;
res.render('user', {
title: userId,
userDetails: userDetails
});
});
});
// GET /user/:id
router.get('/user/:id', function (req, res) {
renderUserPage(req.params.id, res)
});
// POST /user-update
router.post('/user-update', function(req, res) {
// Here goes a lot of logic to validate the form contents, and update the appropriate databases
// Redirect back to the user page, which should display the updated metadata
renderUserPage(req.body.userInitID, res);
});
除此之外:您忽略了数据库调用中的错误。如果你没有为每一个传递给异步回调的错误记录一些东西,那么你将对那些本来很容易调试的问题视而不见。