Node.js找不到url

我正在玩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) 

看起来像无法findurl ,但它在app.js定义良好…

任何想法 ?

你需要在你的routes/index.js文件中做var url = require('url') 。 我假设这是因为nodejs模块系统。 每个模块都是孤立的,从外部唯一可见的东西是你添加到exports (和全局variables,显然)。 所以模块中的局部variables对其他模块不可用。

你得到错误的原因是因为“url”模块没有被导入到你的index.js模块中。

node.js中的每个模块都是封装的,它不会向外界展示任何东西,除非您通过exports来指定它,就像您使用exports.index = function(…){…}

但是,如果这样做,将无法工作,因为Node的URL模块不是用来发出HTTP请求,而是用于处理URL。 根据节点的文档:

“这个模块有用于URLparsing和分析的工具”。 请参阅http://nodejs.org/api/url.html

如果你想向Twitter发送一个HTTP请求,你可以使用一个名为“request”的Node模块来简化一些事情。 请参阅https://github.com/mikeal/request

希望这可以帮助。