2017-02-25 76 views
3

我知道這感覺像是一個重複的問題,但我已嘗試所有可能的方式爲我的ajax請求工作,但它只是無法。這是ajax代碼。 ajax調用是從index.html中的js文件觸發的Cors not for XMLhttprequest node/express

self.getJSON =() => { 
     $.ajax({ 
      type: 'POST', 
      url: 'https://iot-backend-metropolia.herokuapp.com/api/user' , 
      contentType: 'application/json; charset=utf-8', 
      dataType: "json", 
     }) 
     .done(function(result) { 
      console.log(result); 
     }) 
     .fail(function(xhr, status, error) { 
      alert(error); 
     }) 
     .always(function(data){ 
     }); 
    } 

我試過2種方法。

1) npm install cors 
app.use(cors()) 
2) // Add headers 
app.use(function (req, res, next) { 

    // Website you wish to allow to connect 
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8888'); 

    // Request methods you wish to allow 
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); 

    // Request headers you wish to allow 
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); 

    // Set to true if you need the website to include cookies in the requests sent 
    // to the API (e.g. in case you use sessions) 
    res.setHeader('Access-Control-Allow-Credentials', true); 

    // Pass to next layer of middleware 
    next(); 
}); 

這兩種方法都失敗了,我找遍了網上,但每個人的答案是一樣的,現在我就正在發生的事情與我的服務器混淆。

我會發布我的server.js文件,如果有人可以找出最新的錯誤會有很大的幫助。

const path = require('path'); 
const http = require('http'); 
const express = require('express'); 
const cors = require('cors'); 
var bodyParser = require('body-parser'); 
var cookieParser = require('cookie-parser'); 

const publicPath = path.join(__dirname, '../public'); 
const port = process.env.PORT || 3000; 
var app = express(); 

app.use(cors()) 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 

app.use(express.static(publicPath)); 

app.listen(port,() => { 
    console.log(`Server is up on ${port}`); 
}); 

錯誤消息在下面提供。 XMLHttpRequest無法加載https://iot-backend-metropolia.herokuapp.com/api/user。對預檢請求的響應不會通過訪問控制檢查:請求的資源上不存在「訪問控制 - 允許來源」標頭。因此不允許訪問原產地'http://localhost:3000'。

+0

是什麼devtools顯示的響應頭? –

+0

@DanielT。 304未修改 –

回答

0

,你可以補充一點:

app.all('*', function(req, res, next) { 
    res.header('Access-Control-Allow-Origin', '*'); 
    res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild'); 
    res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS'); 

    if (req.method == 'OPTIONS') { 
     res.send(200); 
    } else { 
     next(); 
    } 
}); 
+0

不工作:( –