0.1.1 • Published 7 years ago

quickoa v0.1.1

Weekly downloads
2
License
ISC
Repository
github
Last release
7 years ago

Why

I use this as a bootstrap for quickly getting an API running with PostgreSQL and easier development.

It basically opens a connection pool to PostgreSQL, using pg-promise module.

Has some helper methods for building routes, controllers, and "agents", plus mixing/matching middleware.

To get started, create an index.js file, install pm2 globally, and add a "start" script to your package.json

// package.json
"scripts": {
  "start": "pm2-dev run ecosystem.json"
}
// ecosystem.json
{
  "apps" : [{
    "name"        : "anchor api",
    "script"      : "index.js",
    "args"        : [],
    "watch"       : true,
    "ignore_watch" : ["node_modules", "logs", ".git"],
    "node_args"   : [],
    "log_file": "logs/debug.log",
    "err_file": "logs/error.log",
    "out_file": "logs/out.log",
    "env": {
      "NODE_ENV": "development",
      "POSTGRESQL_HOST": "localhost",
      "POSTGRESQL_PORT": 5432,
      "POSTGRESQL_DB": "your-pg-db-name",
      "POSTGRESQL_USER": "pg-user-name",
      "POSTGRESQL_PASS": "pg-pass-word",
      "PORT": 6789,
      "DEBUG": "*"
    },
    "env_production" : {
       "NODE_ENV": "production"
    },
    "env_staging" : {
       "NODE_ENV" : "staging",
       "TEST"     : true
    }
  }]
}
// index.js
const Quickoa = require('quickoa/app');
const routes  = require('./routes');

const app = new Quickoa();

app.addRoutes(routes);
// routes/index.js
const Route = require('quickoa/route');
const {
  findComments,
  addComment
} = require('../controllers/api/comments');

const api = new Route({
  prefix: '/api'
});

/**
  Gathers comments for a post with post_id

  GET /api/posts/:post_id/comments
*/
api.addRoute('get', '/posts/:post_id/comments', findComments);

/**
  Adds a comment to post with post_id
  
  POST /api/posts/:post_id/comments
*/
api.addRoute('post', '/posts/:post_id/comments', addComment);

module.exports.api = api;
// controllers/api/comments.js
const co = require('co');

const CommentAgent = require('../../agents/comment');
const authenticate = require('../../middlewares/authenticate');

module.exports.findComments = [
  authenticate,
  findCommentsById
];

module.exports.addComment = [
  authenticate,
  addCommentToPost
];

async function findCommentsById *() {
  
}
// agents/comments.js
const Agent       = require('quickoa/agent');
const validator   = require('../validators/comment')
const serializer  = require('../serializers/comment');

const { 
  db: {
    postComments
  }
} = require('quickoa/db/repos');

module.exports = new Agent({
  serializer,
  validator,
  repo: postComments
});
// serializers/comment.js
const Serializer  = require('quickoa/serializer');
const model       = require('../models/comment');

const rootKey = 'comment';

module.exports = new Serializer({ rootKey, model });