我很确定我在我的应用中的某个地方犯了一些愚蠢的错误,但我似乎无法找到它。
所以这就是我的Express应用程序的样子。我的路线设置如下:
var routes = require('./routes');
...
app.get('/', routes.index);
app.get('/embed', routes.embed);
app.post('/upload', routes.upload);
在我的路线文件夹中,我有两个文件。 index.js文件导出两个请求处理程序.index
和.embed
。知道.embed
创建要在/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处理程序;它只是从此页面上的画布对象中获取数据URL,并将其作为值添加到名为“image”的输入字段中。
.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
};
我认为此功能的内容不重要,因为我从/upload
表单获取/embed
请求的以下日志输出。它甚至不打印“接收上传...”行;它只返回一个“无法发布/上传”的页面:
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"
那么,我在这里可能做错了什么?这是我的应用配置吗?我怀疑它可能是这样,因为在我添加CSRF支持后POST请求停止工作。但现在我只是猜测......
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'));
});
答案 0 :(得分:0)
您的index.js
文件应该如下所示,以便routes.upload
实际引用upload
的{{1}}导出:
upload.js