2013-04-12 4 views
1

Node.js를 가지고 놀고 Twitter API 요청을하려고합니다. 내가 익스프레스 생성 된 프로젝트를 사용하고Node.js에서 URL을 찾을 수 없습니다.

, 그래서 내 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')); 
}); 

그리고이

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

꽤 좋은 것 같습니다 같은 index.js처럼 보이지만

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이지만 잘 정의 된 내용은 ...

아이디어가 있으십니까?

답변

9

파일에도 var url = require('url')을 입력해야합니다. 나는 이것이 nodejs 모듈 시스템 때문이라고 생각한다. 각 모듈은 분리되어 있으며 바깥 쪽에서 볼 수있는 유일한 것은 exports (그리고 전역 변수)에 추가 한 것입니다. 따라서 모듈의 로컬 변수는 다른 모듈에서 사용할 수 없습니다.

+0

그러면 왜 작동합니까? '$ node -e 'console.log (url.parse ("http://x.com/"))' URL { 프로토콜 : 'http :', 슬래시 : 참, 인증 : null, 호스트 'x.com', 포트 : 널 (null), 호스트 이름 : 'x.com', 해시 : 널 (null), 검색 : 널 (null), 쿼리 : 널 (null), 경로 : '/', 경로 : '/', href : 'http://x.com/'}' – ekkis

0

"url"모듈을 index.js 모듈로 가져 오지 않았기 때문에 오류가 발생하는 이유가 있습니다.

node.js의 모든 모듈은 캡슐화되어 있으며 exports.index = function (...) {...으로 작업하는 것처럼 사용자가 내보내기를 통해 지정하지 않으면 캡슐화되어 외부에 노출되지 않습니다. .}

그러나 노드의 URL 모듈은 HTTP 요청을하기위한 것이 아니고 URL을 처리하기 때문에 작동하지 않습니다. 노드의 문서에 따라 :

"이 모듈에는 URL 분석 및 구문 분석을위한 유틸리티가 있습니다." http://nodejs.org/api/url.html

트위터에 HTTP 요청을하려면 "request"라고하는 노드 모듈을 사용할 수 있습니다.이 모듈은 약간의 작업을 단순화합니다. https://github.com/mikeal/request

희망이 도움이 되었습니까?

관련 문제