NodeJS模块导出

我有一个简单的http客户端模块(api.js),它返回一个承诺,如下所示:

exports.endpoint = ''; exports.GET = function(args){ args.method = 'GET'; args.uri = this.endpoint + args.uri; return asyncApiCall(args); }; exports.POST = function(args){ args.method = 'POST'; args.uri = this.endpoint + args.uri; return asyncApiCall(args); }; exports.PUT = function(args){ args.method = 'PUT'; args.uri = this.endpoint + args.uri; return asyncApiCall(args); }; exports.DELETE= function(args){ args.method = 'DELETE'; args.uri = this.endpoint + args.uri; return asyncApiCall(args); }; var asyncApiCall = function(args){ var rp = require('request-promise'); var options = { method: args.method, uri: args.uri, body : args.body, json: args.json } return rp(options); }; 

我使用这个模块:

 var api = require('./api.js'); var args = { uri : '/posts' } api.endpoint = 'http://localhost:3000'; api.GET(args) .then(function(res){ console.log(res); }, function(err){ console.log(err); }); 

现在,我想尽可能地改进模块。 有没有办法不重复export.functionName? 我在NodeJS中findmodule.exports,但是我不确定如何在这种情况下使用它。 如何在asyncApiCall函数中设置一次端点variables,而不是返回所有其他返回asyncApiCall的函数?

只是另一种风格:

 var rp = require('request-promise'); // Put it here so you don't have to require 1 module so many times. var asyncApiCall = function(args) { var options = { method: args.method, uri: args.uri, body : args.body, json: args.json }; return rp(options); }; // Let's hack it. var endpoint = ''; var apis = {}; ['GET', 'POST', 'PUT', 'DELETE'].forEach(function(method) { apis[method] = function(args) { args.method = method; args.uri = endpoint + args.uri; return asyncApiCall(args); } }); module.exports = apis; module.exports.endpoint = ''; 

很多人select将他们的导出方法放在一个新的对象上,并通过module.exports导出,例如

 var myExports = { get: function () {}, post: function () {} } module.exports = myExports; 

至于module.exports vs出口

看起来像build立一个完整的构造函数可能是适当的,你的方法与它相关,如下所示:

 var requests = function (endpoint) { this.endpoint = endpoint; } requests.prototype.GET = function (args) { args.method = 'GET'; args.uri = this.endpoint + args.uri; return asyncApiCall(args); } // And so on module.exports = requests; 

然后像这样调用它:

 var api = require('./api.js'); var endpoint = new api("http://localhost:3000"); endpoint.GET() 

将其封装在一个类中,然后导出一个新的实例

 function Module() { } Module.prototype.GET = function () {} module.export = new Module() // or module.export = Module // to call the constructor for your endpoint variable.