2016-07-25 93 views
0

我正在使用Javascript文件尝试从ArcGIS Online获取令牌。然而,每当我尝试它,它回来了Javascript - 如何解决“未捕获的错误:undefinedModule”

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> 
+0

你在代码中的任何地方看到一个名为'init.js'的文件吗?不是100%的问题,但值得看看有什么文件.. – Toby

+0

没有。我认为我应该试着找出如何添加一个。 – user25730

+0

不一定 - 在错误消息中,它是发生错误的那个文件的第11行。如果你能找到它,那可能会给出关于什么模块未定义的线索。 – Toby

回答

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),您可以使用它获取令牌。您可能想使用它。