2

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

这就是我的 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”的输入字段中。

路由在.uploadroutes/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'));
});
4

1 回答 1

0

您的index.js文件应该看起来像这样,routes.upload实际上是指以下内容的upload导出upload.js

exports.upload = require('./upload').upload;

exports.index = function(...

exports.embed = function(...
于 2012-07-26T04:49:58.793 回答