模块没有在NodeJS中定义
我有这个模块,我想要导出到我的客户端控制器的AJAXfunction,但我得到模块没有定义,我使用NodeJS和Cloud9环境。
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'); } })); })();
这似乎是你试图在浏览器中运行代码,而你得到的错误是说module
没有定义。 如果此代码旨在在浏览器中运行,则必须先使用Webpack或Browserify进行打包。
节点没有自己的XmlHttpRequest
,这是我们在networking/浏览器世界中理所当然的。 这可能是您的AJAX模块中的错误的原因。 它试图引用一个不存在的variables( XmlHttpRequest
),因为它不存在,所以文件会得到一个错误。
你可以通过引入你自己的XmlHttpRequest
来解决这个问题,比如这个: https : //github.com/driverdan/node-XMLHttpRequest 。 要做到这一点,只需运行:
npm i --save node-XMLHttpRequest
不过,我会build议,而不是引入一个fetch
。 fetch
是新的,酷,非jQuery,但仍然是简单的AJAX请求的方式,并支持大多数浏览器( http://caniuse.com/#search=fetch )。 就像XmlHttpRequest
,Node没有自己的fetch
版本,但是你可以很容易地添加它:
npm i --save whatwg-fetch
使用fetch
的好处是你可以减less“重新发明轮子”和XmlHttpRequest
。 您可以在这里了解更多关于fetch
信息: https : //developer.mozilla.org/en-US/docs/Web/API/Fetch_API