k00*_*00k 5 validation node.js express
使用node.js并使用express-express表达(2.5.9).
我应该如何使用提交的值重新填充表单字段?
我有get
一条post
路线.如果在发布表单时存在验证错误,我将用户重定向回get,问题是重新填充的本地人没有显示(我确实有autoLocals:true,所以我认为是因为我重定向并且res
是重启.)
那么你们如何重新填充以及你们的申请流程是什么,你们是否res.send
代替res.redirect
并重新设置整个事物?这似乎是重复的.
这是我的帖子路线的一个例子:
app.post(
'/projects/:id'
, form(field("title").required("title", "Title is required)
, function (req, res){
if (!req.form.isValid){
res.redirect('/project/'+req.params.id+'/edit');
}
else{
// save to db
}
});
Run Code Online (Sandbox Code Playgroud)
我正在使用expressjs4.0在验证后重新填充表单字段:
router.route('/posts/new')
.get(function(req, res) {
res.render('posts/new', new Post({}));
});
Run Code Online (Sandbox Code Playgroud)
下面res.render中的第二个参数将在视图中设置一些变量.
res.render('posts/new', new Post({}));
Run Code Online (Sandbox Code Playgroud)
在我看来,然后我将表单字段设置如下:
...
<input type="text" name="title" value="<%- post.title %>">
<textarea name="article"><%- post.article %></textarea>
...
Run Code Online (Sandbox Code Playgroud)
当您提交此表单时,它应该被您的路由器捕获,如下所示:
router.route('/posts')
.post(function(req, res) {
var post = new Post(req.body)
post.save(function(err) {
if (err) {
res.locals.errors = err.errors;
res.locals.post = post;
return res.render('posts/new');
}
return res.redirect('/posts');
});
...
})
Run Code Online (Sandbox Code Playgroud)
这行代码重置了视图中的表单字段
res.locals.post = post;
Run Code Online (Sandbox Code Playgroud)
我希望有人觉得这很有用;)
不确定这是否是最佳实践,但是当我验证失败时,我不会重定向,而是重新渲染视图(通常通过将控制传递给“get”回调)。像这样的东西:
function loadProject(req,res, id){ /* fetch or create logic, storing as req.model or req.project */}
function editProject(req,res){ /* render logic */ }
function saveProject(req,res){
if(!req.form.isValid){
editProject(req,res);
}else{
saveToDb(req.project);
res.redirect('/project'+req.project.id+'/edit');
}
}
app.param('id', loadProject);
app.get('/projects/:id/edit', editProject);
app.post('/projects/:id', saveProject);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5275 次 |
最近记录: |