我是节点和表达的新手,我做了一个小应用程序,但它不起作用。我在第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
谢谢!
答案 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.
}
});