Javascript - 如何解决"未捕获的错误:undefinedModule"

时间:2016-07-25 22:03:29

标签: javascript json arcgis

我正在使用Javascript文件尝试从ArcGIS Online获取令牌。但是,每当我尝试它时,它都会返回

init.js:11 Uncaught Error: undefinedModule

文件(GetAToken.js)如下:

dojo.ready(init);
var request = dojo.require('request'); // npm install request

// generate a token with your client id and client secret
function getToken(callback) {
    request.post({
        url: 'https://www.arcgis.com/sharing/rest/oauth2/token/',
        json: true,
        form: {
            'f': 'json',
            'client_id': '<<MY_CLIENT_ID>>',
            'client_secret': '<<MY_CLIENT_SECRET>>',
            'grant_type': 'client_credentials',
            'expiration': '1440'
        }
    }, function (error, response, body) {
        console.log(body.access_token);
        callback(body.access_token);
    });
}

调用它的位(在HTML文件中)是:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://esri.github.io/calcite-bootstrap/assets/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://js.arcgis.com/4.0/esri/css/main.css">
<script src="https://js.arcgis.com/4.0/"></script>
<script src="GetAToken.js">
    var MyToken = callback(getToken);
    alert(MyToken);
</script>

1 个答案:

答案 0 :(得分:0)

看起来您正试图通过NodeJS(npm install request)获取requestJS。我是对的?

您需要知道NodeJS需要使用CommonJS,而dojo使用RequireJS。它们都有不同的模块结构。更多详情here

在行var request = dojo.require('request');中找不到request模块,因此它会抛出错误。

在dojo中获取nodejs模块的方法是使用dojo/node,如下所示。

require([ "dojo/node!request" ], function(request){
    // Utilise the "request" module
});

浏览Dojo and Node.js

的教程

希望这有用。

PS:Esri有自己的请求对象(esri/request),您可以使用它来获取令牌。您可能想要使用它。