2016-11-15 45 views
0

我想發佈一個json數據,其中包含一組鍵和值從JavaScript到Express.JS。按照其他帖子的建議添加了cors,並且還添加了res.header("Access-Control-Allow-Origin", "*");
當我測試Chrome郵遞員應用程序的POST請求時,它工作得很好。但是,當我通過Chrome瀏覽器通過本地測試網頁發送請求,控制檯輸出
XMLHttpRequest cannot load http://localhost:8080/submit_project_request. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 400.Express.js發佈請求「原產地不允許」錯誤

我對Express.JS代碼:

var http = require("http"); 
var express = require("express"); 
var xmlbuilder = require("xmlbuilder"); 
var bodyParser = require("body-parser"); 
var cors = require("cors"); 

var app = express(); 
app.use(cors()); 
var port = process.env.PORT || 8080; 

app.use(bodyParser.urlencoded({ 
    extended: true 
})); 

app.use(bodyParser.json()); 

app.use(function (req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    next(); 
}); 

app.get('/submit_project_request', function (req, res) { 
    var client_org = req.parm("client_org"); 
}); 

app.post('/submit_project_request', function (req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "X-Requested-With"); 
    next(); 
    console.log(req.body.client_org); 
    res.contentType("text"); 
    res.send("data received"); 
}); 

app.listen(8080); 

請隨時提出任何改善。

回答

2

看來你正在使用file://打開你的網頁。使用一臺服務器,讓你看到類似本地主機提供給您的html頁面:8000/yourpage.html

而且,你並不需要以下中間件(如果你想配置CORS模塊然後使用選項對象像app.use(cors(options))查看可用選項here):

app.use(function (req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    next(); 
}); 

你也可能要刪除您submit_project_request路線如下:

res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "X-Requested-With"); 
    next(); 

調用next()這樣是不推薦。在你的代碼中,它基本上意味着在這裏發送404。如果你打算這樣做,那麼使用return next();

+0

Hello Lucky Soni,謝謝你的回覆。我嘗試從http:// localhost:8080/webpage.html訪問網頁,服務器返回空白頁面,並顯示錯誤消息「無法GET /webpage.html」。任何想法如何解決這個問題?謝謝 –

+0

確保您在端口8080上運行服務器,並且您有'webpage.html'的路由處理程序(如果您使用類似node.js的服務來提供HTML)。如果您使用的是PHP之類的服務器,請確保在項目文件夾的根目錄中有一個名爲「webpage.html」的文件。 –

+0

非常感謝。問題解決了 :) –

相關問題