Export NodeJS module

I have a simple http client module (api.js) that returns a promise, as in the following:

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

        };

and I use the module as follows:

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

Now I want to improve the module as much as possible. Is there a way to not repeat the name export.functionName? I found module.exports in NodeJS, but I'm not sure how to use it in this case. How to set endpoint variable once in asyncApiCall function instead of all other functions returning asyncApiCall?

+4
source share
3 answers

Another style:

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 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 = '';
+2
source

Many people decided to put their export methods on a new object and export via module.exports, for example.

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

module.exports

, :

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()
+2

function Module() {

}

Module.prototype.GET = function () {}

module.export = new Module()
// or
module.export = Module
// to call the constructor for your endpoint variable.
+1
source

Source: https://habr.com/ru/post/1615145/


All Articles