Skip to content

Instantly share code, notes, and snippets.

@rightson
Created October 20, 2017 10:04
Show Gist options
  • Select an option

  • Save rightson/7bcf619bdb5e615302f6181841e135a4 to your computer and use it in GitHub Desktop.

Select an option

Save rightson/7bcf619bdb5e615302f6181841e135a4 to your computer and use it in GitHub Desktop.
Koa example minimal server
'use strict';
const path = require('path');
const zlib = require('zlib');
const winston = require('winston');
const Koa = require('koa');
const Router = require('koa-router');
const koaLogger = require('winston-koa-logger');
const convert = require('koa-convert');
const compress = require('koa-compress');
const staticFiles = require('koa-static');
const body = require('koa-body');
const json = require('koa-json');
const cors = require('koa-cors');
const views = require('koa-views');
const mongoose = require('mongoose');
const env = {
name: require('./package').name,
mode: process.env.NODE_ENV || 'development',
port: process.env.PORT || 3000,
}
const Schema = mongoose.Schema;
mongoose.Promise = global.Promise;
class Views {
async index(ctx) {
return `Hello, world!`;
//return await ctx.render('index.html')
}
}
function registerModel() {
mongoose.model('User', new Schema({
name: String,
email: String,
pasword: String
}));
mongoose.model('Project', new Schema({
name: String,
description: String,
}, {strict: false }));
}
function getRouter() {
const router = new Router();
const views = new Views();
router.get('/', views.index);
return router;
}
async function getApp(router) {
const app = new Koa();
app.use(convert(koaLogger(new winston.Logger({
level: 'debug',
transports: [
new (winston.transports.Console)({
timestamp: true,
colorize: true
})
],
}))));
app.use(compress({ flush: zlib.Z_SYNC_FLUSH }));
app.use(body({ multipart: true }));
app.use(convert(staticFiles(path.join(__dirname, 'public'))));
app.use(convert(json({
pretty: /production/.test(env.mode)? false: true,
param: 'pretty'
})));
app.use(convert(cors()));
app.use(views(path.join(__dirname, 'views'), { map: { html: 'nunjucks' }}));
app.use(router.routes());
app.use(router.allowedMethods());
await app.listen(env.port);
console.log(`${env.name} is listening port ${env.port} (${env.mode} mode)`);
return app;
}
async function main() {
let uri = `mongodb://localhost:27017/${env.mode}-test`;
mongoose.connect(uri, { useMongoClient: true });
registerModel();
let router = getRouter();
return await getApp(router);
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment