为什么我的Node应用程序在这个POST请求上返回404?

我很确定,我在我的应用程序的某个地方犯了一些愚蠢的错误,但我似乎无法find它。

所以这里是我的快速应用程序的样子。 我有我的路线设置如下:

var routes = require('./routes'); ... app.get('/', routes.index); app.get('/embed', routes.embed); app.post('/upload', routes.upload); 

在我的路线文件夹中,我有两个文件。 index.js文件导出两个请求处理程序.index.embed 。 知道.embed会创build一个在/embed页面上使用的CSRF令牌:

 exports.embed = function(req, res){ var csrf = req.session._csrf; res.render('embed', { token: csrf }); }; form#secret-form(name="secret-form", method="post", action="/upload", style="") input(type="hidden", name="_csrf", value="#{token}") input(type="hidden", name="image") input#send-button(type="submit") Upload 

只是一个简短的说明,如果它造成的问题:我没有附加一个.submit jQuery处理程序到这种forms; 它只是从该页面上的canvas对象抓取数据URL,并将其作为名称为“image”的input字段的值。

.upload路由在routes / upload.js文件中处理。 它看起来像这样:

 exports.upload = function(req, res) { console.log("Receiving upload..."); var imageURL = req.body.image; // snippet of code that grabs a canvas data URL and stores it in a file }; 

我不认为这个函数的内容很重要,因为我得到了/embed表单/upload请求的日志输出。 它甚至不打印“接收上传…”行; 它只是返回一个页面,说:“不能POST /上传”:

 127.0.0.1 - - [Thu, 26 Jul 2012 04:07:41 GMT] "POST /upload HTTP/1.1" 404 - "http://0.0.0.0:3000/embed" 

那么,我可能在这里做错了什么? 这是我的应用程序configuration吗? 我怀疑它可能是这样的,因为POST请求添加CSRF支持后停止工作。 但现在我只是猜测…

 app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.bodyParser()); app.use(express.methodOverride()); //app.use(express.limit('1mb')); app.use(express.query()); app.use(express.logger()); // CSRF stuff app.use(express.cookieParser()); app.use(express.session({ secret: "secret", cookie: { maxAge: 60000 } })); app.use(express.csrf()); app.use(app.router); app.use(express.static(__dirname + '/public')); }); 

你的index.js文件应该看起来像这样,使routes.upload实际上是指routes.uploadupload导出:

 exports.upload = require('./upload').upload; exports.index = function(... exports.embed = function(...