模块没有在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议,而不是引入一个fetchfetch是新的,酷,非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