我是node.js的新手并且遇到了cors问题.我正在从一个快递服务器向另一个快递服务器发送客户端ajax get请求,但至少我无法从app.all('*', function(req, res, next){console.log("request: "+req)})
GET请求获得响应,如下所示:
$.ajax({
type: 'GET',
url: 'http://localhost:8082/request'
});
Run Code Online (Sandbox Code Playgroud)
我还在ajax中设置标题:
'beforeSend : function(xhr) {
xhr.setRequestHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS');
xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
xhr.setRequestHeader('Access-Control-Max-Age', '1000');
xhr.setRequestHeader('Authorization', '*')},
Run Code Online (Sandbox Code Playgroud)
...或在node.js中设置cors模块:
var cors = require('cors');
var app = express();
app.use(cors());
app.options('*',cors(),function(){
console.log("preflight")
});
Run Code Online (Sandbox Code Playgroud)
在firefox和chrome中,我没有得到任何响应(我得到了chrome net::ERR_CONNECTION_REFUSED)当我在PC上本地运行节点服务器时,一切正常.curl命令工作正常.有机会,这是托管/端口的问题还是我还缺少什么?
我厌倦了所有浏览器中的以下问题
\n\nCross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://vid-129002.hls.chinanetcenter.broadcastapp.agoraio.cn/live/pub421490684319281/playlist.m3u8. (Reason: CORS header \xe2\x80\x98Access-Control-Allow-Origin\xe2\x80\x99 missing)\nRun Code Online (Sandbox Code Playgroud)\n\n我在 Node js 之上使用了 Reactjs 和 Express。在这里,我尝试从 Agora 服务器播放直播视频,但它没有播放。当我检查控制台时,显示了上述错误。我尝试了一些 Cors 插件到 chrome,它工作得很好。\n我们如何通过直接在express-react环境中添加此标头来解决这个问题?
\n\n从一些教程中我添加了以下内容来解决它:
\n\nvar config = {\nentry: APP_DIR + \'/index.jsx\',\nheaders: {\n "Access-Control-Allow-Origin": "http://localhost:3000",\n "Access-Control-Allow-Credentials": "true",\n "Access-Control-Allow-Headers": "Content-Type, Authorization, x-id, \n Content-Length, X-Requested-With",\n "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS"\n},\nRun Code Online (Sandbox Code Playgroud)\n\n我的 server.js 文件:
\n\n var path = require(\'path\');\n var webpack = require(\'webpack\');\n var express = require(\'express\');\n var …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个登录系统,用户可以在其中注册网站,然后使用他的帐户登录。用户登录后,可以编辑自己的个人信息。
为了检查用户是否已登录,我尝试设置req.session.isLoggedIn为true,然后检查该值是否为 true 以访问网站的某些区域。问题是,就在我登录后,我打印了 的值,req.session并且看到了刚刚设置的值,但之后,当我尝试检查另一条路由中的值时req.session.isLoggedIn,我没有得到任何值。
这是我的代码:
const express = require('express');
const app = express();
var { Client } = require('pg');
var bcrypt = require('bcrypt');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var cors = require('cors');
var path = require('path');
var session = require('express-session');
var url = require("url");
app.use(cors());
app.use(express.static(path.join(__dirname, 'client/build')));
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 600000000 }}))
const client = new Client({
user: …Run Code Online (Sandbox Code Playgroud)我使用 Node 作为后端服务器,使用 Angular 4 作为前端。我正在尝试通过soap协议发送查询结果。该功能运行良好,但浏览器中安装了 CORS 插件。但是如果没有这些插件,我该如何解决。
我搜索了一些解决方案,并在我的节点文件中安装了 CORS 包,并对我的 server.js 文件进行了以下操作。
//## =======BASE SETUP=======
const arangojs = require('arangojs');
const express = require('express');
const aqlQuery = arangojs.aqlQuery;
const bodyParser = require('body-parser');
var cors = require('cors');
var app = express();
app.use(cors());
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
res.setHeader('Access-Control-Allow-Credentials', true);
next();
});Run Code Online (Sandbox Code Playgroud)
但它没有帮助。错误仍然存在。我该如何解决这个错误。我已经发布了我的服务器端代码如下:
var soap = require('strong-soap').soap;
var http = require('http');
var fs = require('fs');
function dbQuery() {
var response = db.query(aqlQuery `
LET …Run Code Online (Sandbox Code Playgroud)我使用 nodejs 和 mongodb 创建了一个 REST Api,我想在 postman 中测试它,但在这样做时我收到了 CORS 错误。
var express = require('express');
var log = require('morgan')('dev');
var bodyParser = require('body-parser');
var properties = require('./config/properties');
var db = require('./config/database.js');
//hero routes
var herosRoutes = require('./api/heros/heros.routes');
var app = express();
//configure bodyparser
var bodyParserJSON = bodyParser.json();
var bodyParserURLEncoded = bodyParser.urlencoded({extended:true});
//initialise express router
var router = express.Router();
// call the database connectivity function
db.mongoc();
// configure app.use()
app.use(log);
app.use(bodyParserJSON);
app.use(bodyParserURLEncoded);
// Error handling
app.use(function(req, res, next) {
res.setHeader("Access-Control-Allow-Origin", "*"); …Run Code Online (Sandbox Code Playgroud) 问题:1.请求头中的"Origin:null"不是express.js的问题.它是否正确?
为什么他们(是浏览器吗?)将Origin设置为null?我认为应该看起来像这样:"localhost:3000/myproject/test/form.html"
在localhost上调用ajax之前,我应该使用jquery($ .ajax()或$ .ajaxSetup())来设置原点吗?
如何使标题中的原点反映真实情况?
这是截图:[...截图现已消失......]
我阅读了以下关于CORS的文章.标头中的原点为null,没有解释.请帮忙.
http://www.html5rocks.com/en/tutorials/cors/
"首先要注意的是,有效的CORS请求始终包含Origin标头.此Origin标头由浏览器添加,不能由用户控制."
我正在制作一个前端带有 Angular 的 Web 应用程序,后端带有 golang 和 mongo 的数据库。我已经启动并运行了数据库,并且所有路由请求都已经过测试并且正在 Postman 上运行。但是,当我尝试对 Angular 应用程序的服务发出 DELETE 请求或 PUT 请求时,出现以下错误:
“从来源“ http://localhost:4200 ”访问“-my api url-”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否“Access-Control-Allow-” Origin'标头存在于所请求的资源上。”
我可以发出 GET 和 POST 请求,但不能发出 DELETE 或 PUT 请求。
我该如何解决这个问题?这是前端问题还是后端问题?任何帮助将不胜感激。谢谢。
PS:我正在使用 mongoHandlers。
这是我在前端的服务:
deleteShow(showId: string) {
let headers = new HttpHeaders();
headers.append("Content-Type", "application/json");
return this.http
.delete<Show>(`${environment.apiBase}/shows/${showId}`, {
headers
})
.pipe(catchError(this.handleError));
}
Run Code Online (Sandbox Code Playgroud)
后端代码:
路线:
func RouteShows(r *mux.Router, shows handlers.ShowHandler) {
sub := r.PathPrefix("/api/shows").Subrouter()
sub.HandleFunc("", getShows(shows)).Methods(http.MethodGet)
sub.HandleFunc("/{id}", getShowById(shows)).Methods(http.MethodGet)
sub.HandleFunc("/{id}", updateShow(shows)).Methods(http.MethodPut)
sub.HandleFunc("", createShow(shows)).Methods(http.MethodPost)
sub.HandleFunc("/{id}", deleteShow(shows)).Methods(http.MethodDelete)
sub.HandleFunc("/status/{status}", …Run Code Online (Sandbox Code Playgroud) var enableCORS = function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
// intercept OPTIONS method
if ('OPTIONS' == req.method) {
res.send(200);
}
else {
next();
}
};
app.use(enableCORS);
Run Code Online (Sandbox Code Playgroud)
我发现在服务器端使用以下代码片段,但当我尝试 POST 时,仍然收到错误:请求的资源上不存在“Access-Control-Allow-Origin”标头。
我在localhost:3000上运行了一个node.js(express)webapp.我现在正在尝试使用cordova开发移动应用程序.
我有一个在我的快递应用程序'localhost:3000/tweets'中定义的路由,当被调用时会使用twitter API获取一些推文并将它们作为json对象发回.Everythinngs使用网络应用程序工作得非常好但是我很难通过移动应用程序进行相同的ajax调用.为了允许来自其他主机的请求,我已将此添加到我的edxpress app.js:编辑:我现在使用cors中间件:
app.use(cors());
Run Code Online (Sandbox Code Playgroud)
在我的cordova应用程序中:
元标记:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
Run Code Online (Sandbox Code Playgroud)
config.xml中
<?xml version='1.0' encoding='utf-8'?>
<widget id="<id...>" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>appname</name>
<description>
A twitter search app.
</description>
<author email="dev@cordova.apache.org" href="http://cordova.io">
Apache Cordova Team
</author>
<content src="index.html" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<access origin="*" />
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent …Run Code Online (Sandbox Code Playgroud) 我认为该请求没有问题,因为我使用了相同的请求来发布新角色并且成功了。我认为问题出在回应上。
我有一个更新角色的API 路线。
router.put('/:id', (req, res, next) => {
const { id } = req.params;
Promise.all([
updateAbilities(id, req.body.abilities, next),
updateCharacter(id, req.body.name, req.body.img, next),
updateShows(id, req.body.shows, next)
])
.then(values => console.log(values, 'are the values received at put request'))
.then(() => res.redirect('/' + id))
.catch(err => next(err));
})
Run Code Online (Sandbox Code Playgroud)
当我使用Postman发送请求时,我得到了完美的响应。
我正在使用Axios在 React 应用程序上执行相同的请求。
export async function updateOne(inputs, cid) {
inputs = {
name: "green …Run Code Online (Sandbox Code Playgroud) 我有一个Node JS后端,它只包含API.
我想为我的系统开发一个Angular仪表板,它通过REST API进行通信以执行所有操作.
我已经看到一些MEAN示例,其中Angular项目位于Node JS项目的公共文件夹中.
但是我想知道这是否是最好的方法,还是我应该创建另一个简单连接到API并且独立托管的项目.
我主要担心的是Node JS项目是在Google Cloud Platform中部署的,我感觉/理解每当我更新某些内容时,我需要上传一个全新的项目实例(并且流量被重定向到这个新实例),所以我如果为前端更改提交了新的更新,则会失去对API版本的控制权.
我在后端有一个 React 应用程序和 Nodejs(Express)。部署到主机服务器后,我为更新某些文档所做的功能停止正常工作。它给出了 CORS 错误:
我有这行代码来处理 server.js 中的 CORS 策略:
app.use((req, res, next) => {
res.set({"Access-Control-Allow-Origin" : "*",
"Access-Control-Allow-Methods" : "HEAD, OPTIONS, GET, POST, PUT, PATCH, DELETE",
"Access-Control-Allow-Headers" : "Content-Type, Authorization, X-Requested-With"})
next();
});
Run Code Online (Sandbox Code Playgroud)
GET 和 POST 方法可以,但对 PUT 不起作用(不知道 Delete 是否有效没试过)
我在这个问题上有很多时间;试过这个:https : //stackoverflow.com/a/42463858/11896129
在网上寻找了一堆解决方案,尝试从 IIS web.config 文件配置它,但没有解决我的问题。我可能会错过哪个部分?