node 路由

来源:互联网 发布:淘宝上架话费充值 编辑:程序博客网 时间:2024/05/21 19:37
  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里面的controllerUserController.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