我很確定我在我的應用程序某處發生了一些愚蠢的錯誤,但我似乎無法找到它。爲什麼我的Node應用程序在此POST請求上返回404?
所以這裏是我的快車應用程序的樣子。我有我的路線設置爲:
var routes = require('./routes');
...
app.get('/', routes.index);
app.get('/embed', routes.embed);
app.post('/upload', routes.upload);
在我的路線文件夾中,我有兩個文件。 index.js文件導出兩個請求處理程序.index
和.embed
。這可能是讓你知道,.embed
創建一個CSRF令牌可以在/embed
頁面上使用:
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
形式將/upload
以下日誌輸出。它甚至不打印「接收上傳...」行;它只是返回一個頁面,上面寫着「無法開機自檢/上傳」:
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"
那麼,我可能在這裏做錯了什麼?它是我的應用程序配置嗎?我懷疑它可能是這樣的,因爲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'));
});
貴'路線/指數。 js'文件使用'require'拉入'routes/upload.js'? – JohnnyHK 2012-07-26 04:34:06
現在它(在文件的頂部添加'var upload = require(「./ upload.js」)),但它沒有幫助。我認爲,如果它沒有被正確包含,我會得到一個異常,而'routes.upload'的行未定義。 – kibibyte 2012-07-26 04:39:10
您還需要將'upload'添加到'index.js'的'exports'。 – JohnnyHK 2012-07-26 04:42:26