codenautas/mini-tools

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# mini-tools
mini tools for express and others


![stable](https://img.shields.io/badge/stability-stable-blue.svg)
[![npm-version](https://img.shields.io/npm/v/mini-tools.svg)](https://npmjs.org/package/mini-tools)
[![downloads](https://img.shields.io/npm/dm/mini-tools.svg)](https://npmjs.org/package/mini-tools)
[![build](https://github.com/codenautas/mini-tools/workflows/Node.js%20CI/badge.svg)](https://github.com/codenautas/mini-tools/actions?query=workflow%3A%22Node.js+CI%22)
[![windows](https://ci.appveyor.com/api/projects/status/github/codenautas/mini-tools?svg=true)](https://ci.appveyor.com/project/codenautas/mini-tools)
[![coverage](https://img.shields.io/coveralls/codenautas/mini-tools/master.svg)](https://coveralls.io/r/codenautas/mini-tools)
[![outdated-deps](https://img.shields.io/github/issues-search/codenautas/mini-tools?color=9cf&label=outdated-deps&query=is%3Apr%20author%3Aapp%2Fdependabot%20is%3Aopen)](https://github.com/codenautas/mini-tools/pulls/app%2Fdependabot)


language: ![English](https://raw.githubusercontent.com/codenautas/multilang/master/img/lang-en.png)
also available in:
[![Spanish](https://raw.githubusercontent.com/codenautas/multilang/master/img/lang-es.png)](LEEME.md)

## Install

```sh
$ npm install mini-tools
```


## Main goal

Have some mini tools for express and others


## API

### serveErr(req, res [, next])


Returns a function that sends a error message to de front-end.
If the error object has setted the property

  * code: is displayed before the message
  * status: is sended in the header (otherwise "400" is sended)


```js
app.post('/insert' , function(req,res){
  //...
  if(duplicate){
    serveErr(req,res)(new Error("Duplicate name. Can't insert"));
    return;
  }
  //...
```


It is promise friendly


```js
app.use('/tools', function(req,res,next){
  //...
  .then(function(){
    if(not_in_this_middleware){
      throw new Error("next");
    }
    // ...
  }).catch(serveErr(req,res,next));
```


*catch* expects a function that receive an error.
*serveErr* returns that function.

When err is Error("next") *serveErr* calls next and does not send any result to de front-end;
otherwise it sends a 400 error with the message and stack.


### serveJade(path, opts)

```js
var express = require('express');
var app = express();

app.use('/',MiniTools.serveJade('./static',true));

app.use('/main',MiniTools.serveJade('./static/index.jade',false));
```


Returns an express middleware to serve jade files.

If *opts* is boolean it will be the *any* option.

If `any==true` it serves files adding .jade to req.path; and
if there is no jade file it call `next()`.

If `any==false` it serves that specific file.

Others options in *opts* are pased to `pug.render` function.

**Note**: for use serveJade you must include `"pug"` in `package.json`


### serveStylus(path, any)

```js
var express = require('express');
var app = express();

app.use('/',MiniTools.serveStylus('./static',true));

app.use('/site.css',MiniTools.serveStylus('./static/index.styl',false));
```


Returns an express middleware to serve jade files.
If `any==true` it serves files adding .jade to req.path; and
if there is no jade file it call `next()`.

If `any==false` it serves that specific file.

**Note**: for use serveStylus you must include stylus in package.json


### serveText(anyText,contentTypeText)

```js
var express = require('express');
var app = express();

app.use('/about',MiniTools.serveText('<h1>This app</h1>','html'));

app.use('/is-up-service',MiniTools.serveText('Yes.'));
```


Returns an express middleware to serve pain text.
Optionaly you can pass "content type".


### serveJson(object)

```js
var express = require('express');
var app = express();

var config = {devel:false, title: "title"};

app.use('/config',MiniTools.serveJson(config));
```


Returns an express middleware to serve an object in JSON format.


### serveYaml(object)

```js
var express = require('express');
var app = express();

var config = {devel:false, title: "title"};

app.use('/config',MiniTools.serveYaml(config));
```


Returns an express middleware to serve an object in yaml format
(using [js-yaml](https:www.npmjs.com/package/js-yaml)).


### readConfig(list, opts)

```js
MiniTools.readConfig(
    [
        {production: true},
        'package.json',
        'other-configs.yml',
        'more-configs',
    ],
    {whenNotExist:'ignore'}
).then(function(config){
    console.log(config);
});
```


Reads the chain of configuration merging with [best-globals.changing](https://www.npmjs.com/package/best-globals#changingoriginalconfig-changes-options).

If the list element is a fileName ending with .json .yaml o .yml, it reads and parse,
if doesn't have extension it search first,
if it is a plain object it uses directly.

**options**
 * whenNotExist:'ignore'
 * whenNotExist:'fail'


## License


[MIT](LICENSE)