node.js의 express.js 프레임 워크에서 교차 출처 리소스 공유 (CORS)를 활성화하는 방법
공용 디렉토리에서 정적 파일을 제공하면서 교차 도메인 스크립팅을 지원하는 node.js에서 웹 서버를 구축합니다. express.js를 사용하고 교차 도메인 스크립팅 ( Access-Control-Allow-Origin: *
) 을 허용하는 방법을 잘 모르겠습니다 .
이 게시물을 성공했지만 도움이되지 않습니다.
var express = require('express')
, app = express.createServer();
app.get('/', function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
app.configure(function () {
app.use(express.methodOverride());
app.use(express.bodyParser());
app.use(app.router);
});
app.configure('development', function () {
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function () {
var oneYear = 31557600000;
// app.use(express.static(__dirname + '/public', { maxAge: oneYear }));
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler());
});
app.listen(8888);
console.log('express running at http://localhost:%d', 8888);
enable-cors.org에서 예제를 확인하십시오 .
node.js의 ExpressJS 앱에서 경로로 다음을 수행하십시오.
app.all('/', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With"); next(); }); app.get('/', function(req, res, next) { // Handle the get for this route }); app.post('/', function(req, res, next) { // Handle the post for this route });
첫 번째 호출 ( app.all
)은 앱의 다른 모든 경로 (또는 최소한 CORS를 활성화하는 경로)보다 먼저 생성됩니다.
[편집하다]
다음을 호출하기 전에 확인하시기 바랍니다 use(express.static())
.
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
코드로 이것을 테스트하고 public
디렉토리 에서 자산에 대한 헤더를 얻었습니다 .
var express = require('express')
, app = express.createServer();
app.configure(function () {
app.use(express.methodOverride());
app.use(express.bodyParser());
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
app.use(app.router);
});
app.configure('development', function () {
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function () {
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler());
});
app.listen(8888);
console.log('express running at http://localhost:%d', 8888);
물론 함수를 모듈로 패키징하여 다음과 같은 작업을 수행 할 수 있습니다.
// cors.js
module.exports = function() {
return function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
};
}
// server.js
cors = require('./cors');
app.use(cors());
@Michelle Tilley 솔루션에 따르면 처음에는 저에게 효과적이지 않았습니다. 왜 그런지 모르겠지만 크롬과 다른 버전의 노드를 사용하고 있습니다. 약간의 조정을 한 후 지금은 저에게 효과적입니다.
app.all('*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
});
누군가가 나와 비슷한 문제에 직면 한 경우 도움이 될 수 있습니다.
이 cors npm 모듈을 시도하십시오 .
var cors = require('cors')
var app = express()
app.use(cors())
이 모듈은 도메인 화이트 리스팅, 특정 API에 대한 cors 활성화 등과 같은 cors 설정을 미세 조정하는 많은 기능을 제공합니다.
나는 이것을 사용한다 :
var app = express();
app
.use(function(req, res, next){
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'X-Requested-With');
next();
})
.options('*', function(req, res, next){
res.end();
})
;
h.readFiles('controllers').forEach(function(file){
require('./controllers/' + file)(app);
})
;
app.listen(port);
console.log('server listening on port ' + port);
이 코드는 컨트롤러가 controllers 디렉토리에 있다고 가정합니다. 이 디렉토리의 각 파일은 다음과 같아야합니다.
module.exports = function(app){
app.get('/', function(req, res, next){
res.end('hi');
});
}
cors express 모듈 사용을 권장 합니다. 이를 통해 도메인을 허용 목록에 추가하고 특히 경로에 대한 도메인을 허용 / 제한 할 수 있습니다.
Access-Control-Allow-Credentials: true
"Credentials"를 통해 "cookie"를 사용 하려면을 설정해야합니다.
app.all('*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
});
내가 취해야 할 추가 단계는 내 URL을 http://localhost
에서http://127.0.0.0
'IT' 카테고리의 다른 글
Mongoose 오류는 무엇입니까? 경로“_id”에서 값 XXX에 대해 ObjectId로 캐스트하지. (0) | 2020.08.26 |
---|---|
Kotlin의 자바 정적 최종 필드와 동일한 것은 무엇인가요? (0) | 2020.08.26 |
Twitter 부트 유효성 경고 메시지를 닫았다가 다시 메시지를 보냅니다. (0) | 2020.08.26 |
Android Studio 프로젝트에서 .jar를 만드는 방법 (0) | 2020.08.26 |
React Router 4에서 인증 된 경로를 구현하는 방법은 무엇입니까? (0) | 2020.08.26 |