2016-06-23 88 views
0

网页应用程序路由新手在这里。我有一个基于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

是不是有一个原因,你不只是用'res.render()'替换重定向? – jfriend00

回答

0

提取可以从这两个地方调用的帮助函数。这是一个非常接近你原来的代码。

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

另外:您正在忽略来自数据库调用的错误。如果你至少没有记录传递给异步回调函数的每一个错误的东西,那么你将会忽视那些直接调试的问题。