Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 在express.js中接受POST请求_Http_Node.js_Express - Fatal编程技术网

Http 在express.js中接受POST请求

Http 在express.js中接受POST请求,http,node.js,express,Http,Node.js,Express,我已经阅读了一些关于如何配置express来监听POST请求的其他问题,但是当我试图打印发送到服务器的简单POST查询时,我不断得到空JSON或未定义的JSON 我已建立了以下设置: //routes require('./routes/signup.js')(app); // Configuration app.configure(function(){ app.use(connect.bodyParser()); app.use(express.methodOverride

我已经阅读了一些关于如何配置express来监听POST请求的其他问题,但是当我试图打印发送到服务器的简单POST查询时,我不断得到空JSON或未定义的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 }}
}

模板如下所示:

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 }}
{{>header.html}
{{>navigation.html}
{{>body.html}
{{>footer.html}
在任何一个部分中都没有特别重要的内容


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

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

从Express.js文档的配置部分:

注意使用app.router,它可以(可选)用于装载应用程序路由,否则第一次调用app.get()、app.post()等将装载路由。


路由文件是在配置块之前还是之后加载的?如果是在bodyParser之前,那么路由器中间件将被添加到堆栈中。将路由文件移到configure block.yep下面,这就是它的全部内容。如果你想,把它作为一个答案,我会接受它!谢谢记住javascript是解释的而不是编译的!!!