- req.params 一个数组,包含命名过得路由参数
router.get(‘/user/shop/:id’, user.shop);
对于这样的路由,在controller获取产品的id,需要用:
var productId = req.params.id;
2.req.body 一个对象,包含post请求参数,这个一般都是form表单提交。这样命名是因为post请求参数在request正文中传递,而不像查询字符串在url中传递。要使req.body可用,需要中间件解析请求。下面是截取项目一段的用法.form是在html里面
<form action="/user/savePassword" method="post">
<section>
<p>
<button class="retun_btn">原密码</button>
</p>
<input id="oldPsd" name="oldPasswd" type="password" name="" id="" value="" placeholder="请输入原密码"/>
</section>
<section>
<p>
<button class="retun_btn">新密码</button>
</p>
<input id="newPsd" name="newPasswd" type="password" name="" id="" value="" placeholder="由6~18位数字、字母组成"/>
</section>
<p>
<button class="chps_confirm">确认</button>
</p>
<input type="hidden" name="loadingText" id="loadingText" value="提交中,请稍后..."/>
</form>
在nodejs里面的controller
UserController.prototype.savePasswd = function(req, res) {
var oldPasswd = req.body.oldPasswd;
var newPasswd = req.body.newPasswd;
base.postJson({
url: req.API_HOST + '/api/user/changePasswd',
form: {
userId: req.session.userId,
oldPasswd: oldPasswd,
newPasswd: newPasswd
}
}, function(result) {
var msg = '';
if (result.err_code == '0') {
req.flash('msg', '密码修改成功');
res.redirect('/user/info');
} else {
res.render('user/change-password', {
msg: result.err_msg
});
}
}, req);
};
3.req.query一个对象,包含以键值对存放的查询字符串参数。在html页面下
<a class="display-block clear pBottom1 ownCard" href="/user/invest/<%=productId%>?cardId=<%=ocard.id%>">
在controller里面,获取var cardId = req.query.cardId;
4.req.originalUrl这个属性返回了 路径和查询字符串(它们不包含协议,主机或端口)。这个旨在保留原始请求和查询字符串.
router.get('/user/unpay', user.unpayList);
在controller里面,unpayList的
var originUrl = req.originalUrl
那么originUrl的植就是/user/unpay。
5.在node里面,表单提交,html页面里面的form表单的action最好给一个有效值,可以是action="javascript:;"也可以是一个提交地址,还有的是method = "post",这个方法要写出来
6.res.locals和req.flash的用法
router.all('/test', pay.test);
在controller下面的一个方法
PayController.prototype.test = function (req, res) {
res.locals.msg = "这是一个测试";
res.render('test');
};
在html页面上
<body>
<p><%=outString(msg)%></p>
</body>
html页面运行结果是<p>这是一个测试</p>
因此res.locals是一个对象,包含用于渲染视图的默认上下文。res.render使用配置的模板引擎渲染视图。
PayController.prototype.test = function (req, res) {
req.flash("msg","这是一个测试");
res.render('test',{msg:req.flash("msg")});
};
在html页面上
<body>
<p><%=outString(msg)%></p>
</body>
html页面运行结果是<p>这是一个测试</p>
7.form表单提交出去,返回错误信息,回到当前提交的表单页面。例如。在code这个页面:
这个页面的路由是:musicController.prototype.acticket = function(req, res) {
res.locals.topMenu = "acticket";
req.session.flagMusic = null;
req.session.flagMusicGrab = null;
req.session.flagMusicTicket = true;
var userId = req.session.userId;
if(userId){
base.postJson({
url: req.API_HOST + '/api/wechat/isNotActivateMusicCode',
form: {
userId:req.session.userId,
}
}, function(result) {
if (result.err_code == '0') {
res.render('music/acticket',{
isActive:result.data.acStatus,
msg:req.flash("msg")
});
}else{
msg = result.err_msg;
res.render('music/acticket',{
msg: result.err_msg
});
}
}, req);
}else {
res.redirect('/login');
}
};
<form action="/musicCode" method="post">
<input type="text" maxlength="6" class="text-input" placeholder="输入激活码" name="codeMusic"/>
<button type="submit" class="btn">激活门票</button>
</form>
<section id="msTip">
<input type="text" name="" id="msg" value="<%=outString(msg)%>"/>
</section>
这个表单提交到
router.post('/musicCode',music.musicCode);
musicController.prototype.musicCode = function(req, res) {
var code = req.body.codeMusic;
base.postJson({
url: req.API_HOST + '/api/wechat/activateMusicCode',
form: {
userId: req.session.userId,
code:code
}
}, function(result) {
if (result.err_code == '0') {
if(result.data.status == 0){
var msg = " ";
req.flash('msg', '激活码错误,请重新输入');
res.redirect('/musicf/acticket');
}else{
res.render('music/actsuc');
}
}else{
res.redirect('/musicf/acticket');
}
}, req)
};
在controller里面
EasonController.prototype.isExit = function(req, res) {
var telphone = req.body.telephone;
res.redirect("/easonPlay/lottery/"+"?tel="+telphone);
};
有一个路由
router.all('/easonPlay/lottery',eason.lottery);
EasonController.prototype.lottery = function(req, res) {
var userId = req.session.userId;
var tel = req.query.tel;//这样就可以获取到tel
if(tel || userId){
res.render('eason/lottery',{telPhone:tel});
}else if(!userId || !tel){
res.redirect("/easonPlay");
}
};
在app.js里面有:
app.set("title","myPhoto");
那么在某一个html页面里面是
<p><%=settings.title%></p>、
那么运行结果是:
<p>myPhoto</p>
从express内部来看,它是用下面的javascript输出这个对象的:
app.locals.settings = app.settings;