2016-11-15 42 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

非常感谢。问题解决了 :) –

相关问题