求助!为什么前端脚本post的数据,在express4.x下面用req.body获取不到,为undefinded?
发布于 10 年前 作者 moJiXiang 11564 次浏览 最后一次编辑是 8 年前

前端脚本: $.ajax({ type : ‘POST’, url : ‘/addattr’, data : {“Action”:“get”,“Name”:“lulu”} }) 服务器端: app.post(’/addattr’, function(req, res){ console.log(req.body) });

8 回复

express4下用了router,不再用app

@ringtail 嗯?我是将所有路由写在routes.js文件中,比如: var site = require(’./routes/site’); var cms = require(’./routes/cms’); module.exports = function(app) { app.get(’/’, site.initIndex); app.get(’/cms’, cms.index); app.post(’/addattr’, function(req, res){ console.log(req.body) }); }

然后在app.js中引入,route(app);

@ringtail难道我这个写法是express3的,整个设计模式都错了?

请参考我的文章“使用express4.x版和Jade模板重写《nodejs开发指南》微博实例 ”, 网址:http://cnodejs.org/topic/53f23e198f44dfa35129c43b 前端我用的是jade模板生成的html: layout.jade的代码:

doctype html html head title= title link(rel=‘stylesheet’, href=’/stylesheets/bootstrap.css’) link(rel=‘stylesheet’, href=’/stylesheets/style.css’) link(rel=‘stylesheet’, href=’/stylesheets/bootstrap-responsive.css’) script(src=’/javascripts/jquery.js’) script(src=’/javascripts/bootstrap.js’) body div.navbar.navbar-fixed-top div.narbar-inner div.container a(class=‘btn btn-navbar’ data-toggle=‘collapse’ data-target=’.nav-collapse’) span.icon-bar span.icon-bar span.icon-bar a(class=‘brand’ href=’/’) Microblog div.nav-collapse ul.nav li.active a(href=’/’) 首页

      - if (!user)
        li
          a(href='/login') 登录
        li
          a(href='/reg') 注册
      - else
        li
          a(href='/logout') 退出

div#container.container

  • if (success) div.alert.alert-success= success
  • if (error) div.alert.alert-error= error
    block content div#footer.footer !=’<hr />‘ p a(href=‘http://www.hotelanywhere.cn’ target=’_blank’) Tony Zhang @2014 All Right Reserved

注册页面reg.jade的代码,使用form,直接post到当前页

extends layout

block content

form(class=‘form-horizontal’ method=‘post’) fieldset legend 用户注册 div.control-group label(class=‘control-label’ for=‘username’) 用户名 div.controls input(type=‘text’ class=‘input-xlarge’ id=‘username’ name=‘username’) p(class=‘help-block’) 你的账户名称,用于登录和显示 div.control-group label(class=‘control-label’ for=‘password’) 密码 div.controls input(type=‘password’ class=‘input-xlarge’ id=‘password’ name=‘password’) div.control-group label(class=‘control-label’ for=‘password’) 请再次输入密码 div.controls input(type=‘password’ class=‘input-xlarge’ id=‘password-repeat’ name=‘password-repeat’) div.form-actions button(type=‘submit’ class=‘btn btn-primary’) 注册

index.js中的代码片段,接收并解析post

router.post("/reg", checkNotLogin); router.post("/reg", function(req, res) { console.log(req.body[‘password’]); console.log(req.body[‘password-repeat’]); if(req.body[‘password-repeat’] != req.body[‘password’]){ req.flash(‘error’, ‘两次输入的密码不一致’); return res.redirect(’/reg’); } var md5 = crypto.createHash(‘md5’); var password = md5.update(req.body.password).digest(‘base64’);

var newUser = new User({ name: req.body.username, password: password, }); //检查用户名是否已经存在 User.get(newUser.name, function(err, user) { if (user) { err = ‘Username already exists.’; } if (err) { req.flash(‘error’, err); return res.redirect(’/reg’); }

newUser.save(function(err) { if (err) { req.flash(‘error’, err); return res.redirect(’/reg’); } req.session.user = newUser; req.flash(‘success’, req.session.user.name+‘注册成功’); res.redirect(’/’); });

}); });

没有加body-parser吧

回到顶部