簡體   English   中英

Restify 的 CORS 問題

[英]CORS issue with Restify

我創建了一個帶有 Node Api 的 ReactJs 應用程序,它使用 Restify,但無論我做什么,我總是有 POST 方法的錯誤:

  • 405(不允許的方法)
  • 訪問以獲取“的http://本地主機:3001 / API /登錄”從原點“的http://本地主機:3000 ”已被封鎖的CORS政策:回應預檢要求未通過訪問控制檢查:沒有“訪問-Control-Allow-Origin' 標頭存在於請求的資源上。 如果不透明響應滿足您的需求,請將請求的模式設置為“no-cors”以在禁用 CORS 的情況下獲取資源。

我已經嘗試了我在互聯網上看到的所有內容,但我總是遇到這個問題。

要調用 API,這是我的代碼:

const request = new Request(url + 'login', {
    method: 'POST',
    body: JSON.stringify({ 'username' : username, 'password' : password }),
    headers: new Headers({ 'Content-Type': 'application/json' })
})
return fetch(request)
    .then(response => {
        if (response.status < 200 || response.status >= 300) {
            throw new Error(response.statusText);
        }
        return response.json();
    })
    .then(({ token }) => {
        localStorage.setItem('token', token);
    });

我像這樣配置 Restify:

const config = require('./config'),
  restify = require('restify'),
  errs = require('restify-errors');


var connection = config.db.get


const server = restify.createServer({
  name: config.name,
  version: config.version,
  url: config.hostname
});

server.use(restify.plugins.acceptParser(server.acceptable));
server.use(restify.plugins.queryParser());
server.use(restify.plugins.bodyParser());

server.use(
  function crossOrigin(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, OPTIONS, DELETE');
    res.header('Access-Control-Allow-Credentials', false);
    return next();
  }
);

server.listen(3001, function () {
  console.log('%s listening at %s', server.name, server.url);
});

server.post("/api/login", function (req, res) {
  res.send(200);
});

所以我希望在調用 Api 后收到驗證(代碼 200),但我總是有 CORS 問題。

還有什么要配置的嗎?

謝謝你的幫助 !!! :D

你必須使用corsMiddleware來避免cors問題......在你的 app.js 文件中編寫這段代碼......它應該可以正常工作

var restify = require('restify');
var corsMiddleware = require('restify-cors-middleware');

var cors = corsMiddleware({
        preflightMaxAge: 5,
        origins: ['*'],
        allowHeaders:['X-App-Version'],
        exposeHeaders:[]
      });
/**
 * Initialize Server
 */
 var server = restify.createServer();

server.pre(cors.preflight);
server.use(cors.actual);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM