2017-04-08 112 views
1

我新的反應,我想簡單的動態變化圖與尊重用戶的輸入,但對於具體的地方SEACH要求這個錯誤上升的XMLHttpRequest不能加載否「訪問控制允許來源」標題存在於所請求的資源。原產地的「http://本地主機:3000」谷歌地圖

JS

的XMLHttpRequest不能負載 https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=undef ... INED &半徑= 1000 &關鍵字= fdtbf &鍵= myapikey。 請求的 資源上沒有「Access-Control-Allow-Origin」標題。原因'http://localhost:3000'因此不允許 訪問。

這是我的節點js代碼

import express from 'express'; 
import path from 'path'; 
import bodyParser from 'body-parser'; 

//Import To Pord 
import api from './routes/api'; 
import auth from './routes/auth' 
import cookieParser from 'cookie-parser'; 
import {LoginCheck} from './middleware/authCheck'; 
import cors from 'cors'; 


//All Webpack Stuff 
import webpackConfig from '../../webpack.config.dev'; 
import webpack from 'webpack'; 
import webpackMiddleware from 'webpack-dev-middleware' 
import webpackHotMidleware from 'webpack-hot-middleware'; 


//Server Side Rendering Stuff 
import {match, RouterContext } from 'react-router'; 
import { Provider } from 'react-redux'; 
import { dispatch } from 'redux'; 
import { renderToString, renderToStaticMarkup } from 'react-dom/server'; 
import reducer from '../../src/client/Reducers'; 
import routes from '../client/routes'; 
import thunk from 'redux-thunk'; 
import { createStore ,applyMiddleware} from 'redux' 
import React from 'react' 
import Helmet from 'react-helmet'; 
import serialize from 'serialize-javascript'; 


//PassPort Stuff Import This 




let app = express(); 
app.use(bodyParser.json()); 
app.use(express.static('public')) 


const compiler = webpack(webpackConfig); 

app.use(webpackMiddleware(compiler, { 
    hot: true, 
    publicPath: webpackConfig.output.publicPath, 
    noInfo: true 
})); 

app.use(webpackHotMidleware(compiler)); 



app.use(cors()); 
app.use(cookieParser('sdkhcvlsd684684JJJklvblsdkuvgblsduvblsidvksdjbvlsjvuywlsfvliusdgv')); 
//Check Auth MiddleWare 
app.use(LoginCheck) 
//Passport Api 
app.use('/auth',auth); 
//Our Api 
app.use('/p',api); 



app.get('/*', (req, res,next) => { 

    // res.sendFile(path.join(__dirname, '../../index.html')) 
    // Server Side Rendering Starts 
    match({routes:routes(),location:req.url},(err,redirectLocation,renderProps) => { 
     if (err) return next(err); 


     if (redirectLocation) { 
      return res.redirect(302, redirectLocation.pathname + redirectLocation.search) 
     } 

     // if (!renderProps) { 
     //  res.redirect('/404') 
     // } 

     const components = renderProps.components; 

     const Comp = components[components.length - 1].WrappedComponent; 

     const fetchData = (Comp && Comp.fetchData) || (() => Promise.resolve()) 

     const initialState = {} 

     const store = createStore(reducer, initialState, applyMiddleware(thunk)); 


     const { location, params, history } = renderProps 

     fetchData({ store, location, params, history }).then(() => { 
      const body = renderToString(
       <Provider store={store}> 
        <RouterContext {...renderProps} /> 
       </Provider> 
      ) 

      const state = store.getState(); 
      // console.log(state) 


      let head = Helmet.rewind(); 
      res.header('Access-Control-Allow-Origin', "*"); 
      res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); 
      res.header('Access-Control-Allow-Headers', 'Content-Type'); 
      res.send(`<!DOCTYPE html> 
      <html> 
      <head> 
       ${head.title} 
       ${head.meta} 
       ${head.link} 
      </head> 
      <body> 
       <div id="app" >${body}</div> 
       <script>window.__STATE__=${JSON.stringify(state)}</script> 

       <script src="/bundle.js"></script> 
      </body> 
      </html>`) 
     }) 
      .catch((err) => next(err)) 



    }) 
}); 


app.listen(3000 ,() => { 
    console.log('Listening') 
}); 

這是我的愛可信要求

export function getPlaceFromCoords(term,coords) { 
    // https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=13.0826802,80.2707184&radius=500&keyword=parks&key=AIzaSyAZbur2hq7p3UxjYrA2_G4ctpswFi0pO3A 
    console.log(coords) 
    return dispatch => { 
     return axios.get(`https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=${coords.lat},${coords.lng}&radius=1000&keyword=${term}&key=${config.MAP_API}`).then(response => { 
      return response.data 
     }) 
    } 

} 
+0

向後端傢伙來實現CORS。與反應無關。 – Ved

+0

我用這個中間件** app.use(CORS()); **但是沒有用 – Nane

+2

您需要檢查正常。但它都是後端的東西。沒有Reactjs問題。 – Ved

回答

3

的CORS頭沒有設定在谷歌後端服務器Places API的網絡服務。因此,由於瀏覽器的同源策略,您將無法從客戶端JavaScript代碼調用Places API Web服務。

爲了使用JavaScript,你必須使用谷歌地圖的JavaScript API的地方庫在客戶端的地方。場所圖書館附近有雷達和文字搜索功能,與相應的網絡服務非常相似。

欲瞭解更多詳情,請看看文檔:

https://developers.google.com/maps/documentation/javascript/places

希望它能幫助!

相關問題