NodeJS中未定义模块

时间:2017-01-05 21:48:25

标签: javascript node.js module

我有这个模块,包含我想要导出到我的客户端控制器的AJAX功能,但是我没有定义Module,我正在使用NodeJS和Cloud9环境。

AJAX模块

package com.test;
public class MyTest
{
    public static void main(String[] args)
    {
         System.out.println("test fle");
    }

}

客户端控制器

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();
  }
};

2 个答案:

答案 0 :(得分:0)

您似乎正在尝试在浏览器中运行代码,而您遇到的错误是说module未定义。如果要在浏览器中运行此代码,则必须先将其与Webpack或Browserify打包在一起。

答案 1 :(得分:0)

Node没有自己的XmlHttpRequest,这是我们在网络/浏览器世界中理所当然的。这可能是您的AJAX模块中出错的原因。它试图引用一个不存在的变量(XmlHttpRequest),因为它不存在,所以文件会出错。

可以通过引入您自己的XmlHttpRequest来解决此问题,例如: https://github.com/driverdan/node-XMLHttpRequest。要做到这一点,只需运行:

npm i --save node-XMLHttpRequest

但是,我建议改为引入fetchfetch是一种新的,非常酷的非jQuery,但仍然是制作AJAX请求的简单方法,并且它得到了大多数浏览器的支持(http://caniuse.com/#search=fetch)。与XmlHttpRequest一样,Node没有自己的fetch版本,但您可以轻松添加它:

npm i --save whatwg-fetch

使用fetch的好处是你可以减少对轮子的重新发明"与XmlHttpRequest做对比。您可以在此处详细了解fetchhttps://developer.mozilla.org/en-US/docs/Web/API/Fetch_API