2017-01-05 27 views
2

このモジュールはAJAX機能で構成されていますが、私はクライアントコントローラにエクスポートしようとしていますが、モジュールが定義されていない、NodeJSとCloud9環境を使用しています。モジュールがNodeJSで定義されていません

AJAXモジュール

module.exports = { 
    appUrl: window.location.origin, 
    ready: function(fn) { 
    if(typeof fn !== 'function') { 
     return; 
    } 

    if(document.readyState === 'complete') { 
     return fn(); 
    } 

    document.addEventListener('DOMContentLoaded', fn, false); 
}, 
    ajaxRequest: function(method, url, callback) { 
    var xmlhttp = new XMLHttpRequest(); 

    xmlhttp.onreadystatechange = function() { 
     if(xmlhttp.readyState === 4 && xmlhttp.status === 200) { 
      callback(xmlhttp.response); 
     } 
    }; 

    xmlhttp.open(method, url, true); 
    xmlhttp.send(); 
    } 
}; 

クライアントコントローラ

'use strict'; 

var ajaxFunctions = require("../common/ajax-functions.js"); 

(function(){ 

    var profileId = document.querySelector('#profile-id') || null; 
    var profileUsername = document.querySelector('#profile-username') || null; 
    var profileRepos = document.querySelector('#profile-repos') || null; 
    var displayName = document.querySelector('#display-name'); 
    var apiUrl = ajaxFunctions.appUrl + '/api/:id'; 

    function updateHtmlElement(data, element, userProperty) { 
     element.innerHTML = data[userProperty]; 
    } 

    ajaxFunctions.ready(ajaxFunctions.ajaxRequest('GET', apiUrl, function(data){ 
     var userObject = JSON.parse(data); 

     updateHtmlElement(userObject, displayName, 'displayName'); 

     if(profileId !== null) { 
      updateHtmlElement(userObject, profileId, 'id'); 
     } 

     if(profileUsername !== null) { 
      updateHtmlElement(userObject, profileUsername, 'username'); 
     } 

     if(profileRepos !== null) { 
      updateHtmlElement(userObject, profileRepos, 'publicRepos'); 
     } 
    })); 
})(); 
+0

エラーメッセージにエラーが発生した行が表示されますか?ちょっと推測すると、 'var ajaxFunctions = require(" ../ common/ajax-functions.js ");が正しい場所を指していること、そして' ajax-functions.js'が有効なモジュールをエクスポートしていることを確認する必要があると思います。 – Schlaus

+0

ajax-functions.jsの1行目にエラーが発生しました –

+0

その行を投稿できますか? – Schlaus

答えて

0

ブラウザでコードを実行しようとしているように思える、とあなたが取得しているエラーはmoduleがないことを言っています定義された。このコードをブラウザで実行する場合は、まずWebpackまたはBrowserifyでパッケージ化する必要があります。

0

ノードには、独自のXmlHttpRequestがありません。これは、Web /ブラウザの世界では当然のことです。これはおそらく、AJAXモジュールのエラーの原因です。存在しない変数(XmlHttpRequest)を参照しようとしています。存在しないため、ファイルにエラーが発生します。 https://github.com/driverdan/node-XMLHttpRequest

あなたなど、この一つとして、XmlHttpRequestあなた自身にもたらすことによってこの問題を解決することができます。これを行うには、単純に実行します。

npm i --save node-XMLHttpRequest 

しかし、私はfetchに持ち込む代わりにお勧めします。 fetchは新しい、クールで非jQueryですが、AJAXリクエストを作成するにはまだ簡単な方法で、ほとんどのブラウザ(http://caniuse.com/#search=fetch)でサポートされています。ただ、XmlHttpRequestと同様に、ノードはfetchの独自のバージョンを持っていませんが、あなたは簡単にそれを追加することができます。

npm i --save whatwg-fetch 

fetchを使用することの利点は、ホイールの少ない「再発明しを持っているだろうということです"対対XmlHttpRequestfetchの詳細については、https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

関連する問題