Express.js:node.js,express.js和jade in form post,不显示第二页

时间:2014-02-13 21:07:54

标签: javascript jquery node.js express

我是节点和表达的新手,我做了一个小应用程序,但它不起作用。我在第1页发布,应用程序没有显示第2页。结构和代码是:

/
/controller/controllers.js
/node_modules/express
             /jade
             /mongoose
/view/index1.jade
     /index2.jade
     /layout.jade
app.js
package.json

app.js

/* server */
var express = require('express')    
  , routes = require('./routes')
  , fs = require('fs');

//Create server
var app = express.createServer();

//Use controller
var controllers_path = __dirname + '/controllers'
    ,controller_files = fs.readdirSync(controllers_path);
    controller_files.forEach(function (file) {
        require(controllers_path+'/'+file)(app);
});

//Jade configuration
app.configure(function() {
    app.set('view options', { layout: false });
    app.use(express.static(__dirname + ''));
});

app.listen(3001);
console.log("listening on port %d", app.address().port);

controller.js

module.exports = function(app, auth){

    // Get
    app.get('/test1', function(req, res){
        res.render('index.jade', {});
    });

    // Post
    app.get('/test2', function(req, res){
        res.render('index2.jade', {});
    });

};

index.jade

extends layout
block content   
    form(method="post", action="/test2")
    p
    input(type="submit")

index2.jade

extends layout
block content
    p Page 2

layout.jade

h1 Test layout
block content

谢谢!

1 个答案:

答案 0 :(得分:0)

问题是你没有/test2的POST处理程序。在您的HTML中,您指定的是method="POST",但在您的控制器中,您只是在处理GET方法。

您想将其更改为:

// Post
app.post('/test2', function(req, res){
    res.render('index2.jade', {});
});

顺便提一下,如果要处理所有请求类型,可以使用app.all,然后根据方法类型决定做什么:

app.all('/test2', function(req, res){
    if(req.method==='GET'){
        // one response for GET requests
    } if(req.method==='POST'){
        // another response for POST requests
    } else {
        // catch all...PUT, DELETE, etc.
    }
});