2016-12-12 10 views
0

リクエストをサーバーExpressに実行しています。私がそうすると、サーバーはInstagram APIに対してAJAXリクエストを実行することになっています。しかし、私はこのエラーを取得しています:ここで

TypeError: _jquery2.default.ajax is not a function 
    at /Users/bli1/Development/projects/bradford/server/server.js:53:7 
    at Layer.handle [as handle_request] (/Users/bli1/Development/projects/bradford/node_modules/express/lib/router/layer.js:95:5) 
    at next (/Users/bli1/Development/projects/bradford/node_modules/express/lib/router/route.js:131:13) 
    at Route.dispatch (/Users/bli1/Development/projects/bradford/node_modules/express/lib/router/route.js:112:3) 
    at Layer.handle [as handle_request] (/Users/bli1/Development/projects/bradford/node_modules/express/lib/router/layer.js:95:5) 
    at /Users/bli1/Development/projects/bradford/node_modules/express/lib/router/index.js:277:22 
    at Function.process_params (/Users/bli1/Development/projects/bradford/node_modules/express/lib/router/index.js:330:12) 
    at next (/Users/bli1/Development/projects/bradford/node_modules/express/lib/router/index.js:271:10) 
    at goNext (/Users/bli1/Development/projects/bradford/node_modules/webpack-dev-middleware/middleware.js:194:41) 
    at processRequest (/Users/bli1/Development/projects/bradford/node_modules/webpack-dev-middleware/middleware.js:236:12) 

は私のサーバーのコードの抜粋です:

import $ from 'jquery'; 

app.get("/instagram", (req, res) => { 
    const instagramEndpoint = "https://api.instagram.com/v1/users/self/media/recent/?access_token="; 
    const limit = 16; 
    const user = "usertest"; 
    const keys = require('./keys.json'); 
    const accessToken = keys.instagram.accessToken; 
    console.log('Hit Instagram API'); 
    $.ajax({ 
     method: 'GET', 
     url: instagramEndpoint + accessToken[user], 
     dataType: 'json', 
     success: payload => { 
      console.log(payload); 
      return payload; 
     }, 
     error: payload => { 
      console.log(payload); 

     } 
    }); 
}); 
+0

jqueryは呼び出している時間までに読み込まれていますか? – Bindrid

+0

@ Bindridする必要がありますか?それは一番上にインポートされていますが、すべての非同期性が競合条件を引き起こしているかもしれません – Liondancer

答えて

1

私のExpressルートでjqueryを動作させる唯一の方法は、jsdomを使用してDOM環境をシミュレートすることです。あなたがやろうとしているすべてのREST呼び出しを行う場合である

app.get('/silos', (request, response) => { 
    require('jsdom').env('', (err, window) => { 
    const $ = require('jquery')(window); 
    $.get('http://demo2632149.mockable.io/silos') 
     .then((successResponse) => { 
     response.send(successResponse); 
     }); 
    }); 
}); 

そうでなければ、私は非常にaxiosを使用することをお勧めします。

import axios from 'axios'; 

app.get('/silos', (request, response) => { 
    axios.get('http://demo2632149.mockable.io/silos') 
    .then((successResponse) => { 
     response.send(successResponse.data); 
    }); 
}); 
1

私はここで少し推測のNode.jsを使用するが、これを試してみてください...

していません
import $ from 'jquery';   

$(document).ready(function() { 

       app.get("/instagram", (req, res) => { 
        const instagramEndpoint = "https://api.instagram.com/v1/users/self/media/recent/?access_token="; 
        const limit = 16; 
        const user = "usertest"; 
        const keys = require('./keys.json'); 
        const accessToken = keys.instagram.accessToken; 
        console.log('Hit Instagram API'); 
        $.ajax({ 
         method: 'GET', 
         url: instagramEndpoint + accessToken[user], 
         dataType: 'json', 
         success: payload => { 
          console.log(payload); 
          return payload; 
         }, 
         error: payload => { 
          console.log(payload); 

         } 
        }); 
       }); 

      }); 
関連する問題