Javascript 为什么我的节点应用程序在这个POST请求中返回404?
我确信我在我的应用程序的某个地方犯了一些愚蠢的错误,但我就是找不到它 下面是我的Express应用程序的外观。我的路线设置如下: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。
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')
实际上并不包含整个目录。