5

Node.js をいじって、Twitter API リクエストを作成しようとしています。

私は Express で生成されたプロジェクトを使用しているので、そのようにapp.js見えます

var express = require('express')
  , routes = require('./routes')
  , http = require('http')
  , path = require('path')
  , url = require('url');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

そして、index.jsこのような

exports.index = function(req, res){

  var username = 'Axiol';

  option = {
    protocol: 'http:',
    host: 'api.twitter.com',
    pathname: '/1/statuses/user_timeline.json',
    query: { screen_name: username, count: 10 }
  }

  var twitterUrl = url.format(options);

  console.log(twitterUrl);
};

かなり問題ないようですが、常にこれらのエラーが返されます

ReferenceError: url is not defined
    at exports.index (/Users/Arnaud/Sites/badge/routes/index.js:17:20)
    at callbacks (/Users/Arnaud/Sites/badge/node_modules/express/lib/router/index.js:161:37)
    at param (/Users/Arnaud/Sites/badge/node_modules/express/lib/router/index.js:135:11)
    at pass (/Users/Arnaud/Sites/badge/node_modules/express/lib/router/index.js:142:5)
    at Router._dispatch (/Users/Arnaud/Sites/badge/node_modules/express/lib/router/index.js:170:5)
    at Object.router (/Users/Arnaud/Sites/badge/node_modules/express/lib/router/index.js:33:10)
    at next (/Users/Arnaud/Sites/badge/node_modules/express/node_modules/connect/lib/proto.js:190:15)
    at Object.methodOverride [as handle] (/Users/Arnaud/Sites/badge/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js:37:5)
    at next (/Users/Arnaud/Sites/badge/node_modules/express/node_modules/connect/lib/proto.js:190:15)
    at multipart (/Users/Arnaud/Sites/badge/node_modules/express/node_modules/connect/lib/middleware/multipart.js:64:37)

が見つからないように見えますが、 ...urlで明確に定義されています。app.js

何か案が ?

4

2 に答える 2

13

ファイルでも行う必要がありvar url = require('url')ます。routes/index.jsこれはnodejsモジュールシステムによるものだと思います。各モジュールは分離されており、外部から見える唯一のものは、追加するものexports(および明らかにグローバル) です。したがって、モジュール内のローカル変数は、他のモジュールでは使用できません。

于 2013-04-12T18:25:43.523 に答える
0

エラーが発生する理由は、「url」モジュールが index.js モジュールにインポートされていないためです。

node.js のすべてのモジュールはカプセル化されており、exports.index = function(...) { ... } で行っているように、エクスポートで指定しない限り、外部に何も公開しません。

ただし、Node の URL モジュールは HTTP リクエストを作成するためのものではなく、URL を処理するためのものであるため、それを行っても機能しません。ノードのドキュメントに従って:

「このモジュールには、URL の解決と解析のためのユーティリティがあります」。http://nodejs.org/api/url.htmlを参照してください

Twitter に HTTP リクエストを送信する場合は、"request" と呼ばれるノード モジュールを使用すると、少し簡単になります。https://github.com/mikeal/requestを参照してください

お役に立てれば。

于 2013-04-12T22:09:44.097 に答える