Express.js发布请求“原产地不允许”错误
问题描述:
我想发布一个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);
请随时提出任何改善。
答
看来你正在使用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();
Hello Lucky Soni,谢谢你的回复。我尝试从http:// localhost:8080/webpage.html访问网页,服务器返回空白页面,并显示错误消息“无法GET /webpage.html”。任何想法如何解决这个问题?谢谢 –
确保您在端口8080上运行服务器,并且您有'webpage.html'的路由处理程序(如果您使用类似node.js的服务来提供HTML)。如果您使用的是PHP之类的服务器,请确保在项目文件夹的根目录中有一个名为“webpage.html”的文件。 –
非常感谢。问题解决了 :) –