在帖子中/之后表达呈现

时间:2016-06-23 14:13:18

标签: node.js express routes

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;

1 个答案:

答案 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);
});

除此之外:您忽略了数据库调用中的错误。如果你没有为每一个传递给异步回调的错误记录一些东西,那么你将对那些本来很容易调试的问题视而不见。