1

OS X 10.8.2 Mac の node.js v0.8.17 で dojo 1.8 の dojo/request を動作させようとしています。

dojotoolkit.orgから 2 つの例を試しましたが、どちらも同じエラーで失敗します。

module.js:236
  var start = request.substring(0, 2);
                      ^
TypeError: Object require,dojo/request has no method 'substring'
    at Function.Module._resolveLookupPaths (module.js:236:23)
    at Function.Module._resolveFilename (module.js:328:31)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/Users/chris/src/bsn/INF/spikes/dojo_1-8/example/example.js:12:1)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)

以下は、 dojo チュートリアルに基づく最初の例です。

// dojo-release-1.8.3-src is installed in the same directory as this script

dojoConfig = {
    baseUrl: ".",
    packages:[{name: 'dojo', location: 'dojo'}],
    deps:['dojo/request', 'dojo/date']
};

require('./dojo/dojo.js');

console.log("I can call dojo/date functions no problem:");
console.log("e.g. Time Zone is:" + dojo.date.getTimezoneName(new Date()));

console.log("But when I try to use dojo/request it fails:");

// Following taken from:
// http://dojotoolkit.org/documentation/tutorials/1.8/ajax/

require(["dojo/request"], function(request){
    request("helloworld.txt").then(
        function(text){
            console.log("The file's contents is: " + text);
        },
        function(error){
            console.log("An error occurred: " + error);
        }
    );
});

dojo リファレンス ガイドからの 2 番目の例を次に示します。

// dojo-release-1.8.3-src is installed in the same directory as this script

dojoConfig = {
    baseUrl: ".",
    packages:[{name: 'dojo', location: 'dojo'}],
    deps:['dojo/request', 'dojo/date']
};

require('./dojo/dojo.js');

// Following is taken from:
// https://dojotoolkit.org/reference-guide/1.8/dojo/request/node.html#id5

require(['require', 'dojo/request'], function(require, request){
  var http = require.nodeRequire('http'),
    timeout;

  var server = http.createServer(function(request, response){
    var body = '{ "foo": "bar" }';
    response.writeHead(200, {
      'Content-Length': body.length,
      'Content-Type': 'application/json'
    });
    response.write(body);
    response.end();
  });

  server.on('close', function(){
    if(timeout){ clearTimeout(timeout); }
  });

  server.on('listening', function(){
    request.get('http://localhost:8124', {
      handleAs: 'json',
      headers: { 'Range': '1-2' },
      timeout: 1000
    }).then(function(data){
      console.log(data);
      server.close();
    }, function(err){
      console.log(err);
      server.close();
    });
  });

  server.listen(8124);
});

私が理解していないのは、最初の例で dojo.date の呼び出しが正常に機能するのに、dojo.require が機能しない理由です。

何か案は?

ありがとう

クリス

4

1 に答える 1

0

それで、dojo-interestメーリングリストのいくつかのスレッド、bpayton、Kenneth G. Franqueiro、kitsonkの小道具のおかげで、私はこの問題を解決することができました。

dojo / requestを機能させるには、モジュールからそれを要求する必要があります。この場合、「helloworld.txt」というドキュメントをリクエストしているため、「helloworld.js」と呼びます。

// Following taken from:
// http://dojotoolkit.org/documentation/tutorials/1.8/ajax/

require(["dojo/request"], function(request){
    request("helloworld.txt").then(
        function(text){
            console.log("The file's contents is: " + text);
        },
        function(error){
            console.log("An error occurred: " + error);
        }
    );
});

次に、このモジュールをdojoConfigdeps配列に含めます。

// dojo-release-1.8.3-src is installed in the same directory as this script

dojoConfig = {
    baseUrl: ".",
    packages:[{name: 'dojo', location: 'dojo'}],
    deps:['dojo/request', 'dojo/date', 'helloworld.js']
};

require('./dojo/dojo.js');

console.log("I can call dojo/date functions no problem:");
console.log("e.g. Time Zone is:" + dojo.date.getTimezoneName(new Date()));

console.log("And now when I try to use dojo/request it works:");

ノードから実行すると、次のようになります。

arnosgrove:example chris$ node useRequest.js 
I can call dojo/date functions no problem:
e.g. Time Zone is:GMT
And now when I try to use dojo/request it works
The file's contents is: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>

それが私が期待するものです。

于 2013-01-29T18:20:56.007 に答える