Javascript 为什么我的节点应用程序在这个POST请求中返回404?

Javascript 为什么我的节点应用程序在这个POST请求中返回404?,javascript,node.js,express,Javascript,Node.js,Express,我确信我在我的应用程序的某个地方犯了一些愚蠢的错误,但我就是找不到它 下面是我的Express应用程序的外观。我的路线设置如下: var routes = require('./routes'); ... app.get('/', routes.index); app.get('/embed', routes.embed); app.post('/upload', routes.upload); 在我的routes文件夹中,我有两个文件。js文件导出两个请求处理程序.index和.embed。

我确信我在我的应用程序的某个地方犯了一些愚蠢的错误,但我就是找不到它

下面是我的Express应用程序的外观。我的路线设置如下:

var routes = require('./routes');
...
app.get('/', routes.index);
app.get('/embed', routes.embed);
app.post('/upload', routes.upload);
在我的routes文件夹中,我有两个文件。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
};
我认为这个函数的内容无关紧要,因为我从
/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'));
});

您的
index.js
文件应该是这样的,因此
routes.upload
实际上是指
upload.js的
upload
导出:

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

exports.index = function(...

exports.embed = function(...

您的
index.js
文件应该是这样的,因此
routes.upload
实际上是指
upload.js的
upload
导出:

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

exports.index = function(...

exports.embed = function(...

您的
routes/index.js
文件是否使用
require
拉入了
routes/upload.js
?现在它拉入了(在文件顶部添加了
var upload=require(“./upload.js”)
,但没有帮助。我假设如果没有正确地包含它,我会在
路线上遇到一个异常。上传
未定义。你还需要将
上传
添加到
index.js的
导出
。哇,它成功了!我添加了
exports.upload=upload.upload
(因为
upload
实际上是该模块中的一个功能)。谢谢你应该把它作为一个答案添加进来,这样我就可以接受了。你的
routes/index.js
文件是否用
require
拉入
routes/upload.js
?现在它拉入了(在文件顶部添加了
var upload=require(“./upload.js”)
),但没有帮助。我假设如果没有正确地包含它,我会在
路线上遇到一个异常。上传
未定义。你还需要将
上传
添加到
index.js的
导出
。哇,它成功了!我添加了
exports.upload=upload.upload
(因为
upload
实际上是该模块中的一个功能)。谢谢您应该添加它作为答案,这样我就可以接受它。我觉得如果其他任何节点初学者偶然发现这一点,则有必要进行后续操作:令我惊讶的是,如果请求处理程序为
null
或甚至
未定义
,Express实际上不会抛出错误。此外,还发现
require('./routes')
实际上并不包含整个目录。我觉得如果其他节点初学者偶然发现这一点,则有必要进行后续操作:令我惊讶的是,如果请求处理程序
null
甚至
未定义
,Express实际上不会抛出错误。此外,
require('./routes')
实际上并不包含整个目录。