node 路由

  1. 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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值