【问题标题】:Accepting POST requests in express.js在 express.js 中接受 POST 请求
【发布时间】:2012-07-10 14:08:26
【问题描述】:

我已经阅读了有关如何配置 express 以侦听 POST 请求的其他几个问题,但是当我尝试打印发送到服务器的简单 POST 查询时,我不断得到空 JSON 或未定义。

我已经设置好了:

//routes
require('./routes/signup.js')(app);

// Configuration
app.configure(function(){
    app.use(connect.bodyParser());
    app.use(express.methodOverride());
    app.register(".html", hulk);
    app.set('views', __dirname + '/views');
    app.set('view options', {layout: false});
    app.set('view engine', 'hulk');
    app.use(express.static(__dirname + '/public'));
    app.use(app.router);
});

那么routes/signup.js 看起来像这样:

var common_functions = require('../common_functions.js');
var views            = require('../views/view_functions.js');
var globals          = require('../globals.js');
var mongoose         = require('mongoose');

//declare classes
var User = mongoose.model('User');

module.exports = function(app){
    /**
     * SignUp GET
     */
    app.get('/signup', function(req, res){
        res.render('signup/signup.html');
    });

   /**
    * SignUp POST
    */
   app.post('/signup', function(req, res){
    console.log(JSON.stringify(req.body));
    console.log(req.body);
    res.send(JSON.stringify(req.body));
});

}

模板如下所示:

{{> header.html }}
{{> navigation.html }}
{{> body.html }}
<form action="/signup" method="post">
    <input name="email"/>
    <input type="submit"/>
</form>
{{> footer.html }}

没有什么特别感兴趣的部分。

两个console.log 打印出未定义,而res.send() 只是返回与以前相同的html。我在这里做错了什么?

【问题讨论】:

  • 路由文件是在配置块之前还是之后加载的?如果在此之前,则路由器中间件将在 bodyParser 之前添加到堆栈中。将路由文件移到配置块下方。
  • 是的,就是这样。如果您愿意,请将其添加为答案,我会接受!谢谢。始终重要的是要记住 javascript 被解释为未编译!!!

标签: http node.js express


【解决方案1】:

Express 会在第一次调用路由器的任何动词函数时自动安装路由器中间件(如果尚未安装)。因此,通过在配置块上方加载路由,路由器中间件是堆栈中的第一个中间件(在 bodyParser 上方)。将加载路由文件移动到配置块下方将解决此问题。

来自 Express.js 文档的配置部分:

Note the use of app.router, which can (optionally) be used to mount the application routes, otherwise the first call to app.get(), app.post(), etc will mount the routes.

http://expressjs.com/guide.html#configuration

【讨论】:

    猜你喜欢
    • 2018-08-14
    • 1970-01-01
    • 2018-11-13
    • 2017-01-30
    • 2021-05-15
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多