Koa搭建简单服务器
1. dependencies
"co-mysql": "^1.0.0",
"koa": "^2.7.0",
"koa-better-body": "^3.0.4",
"koa-ejs": "^4.2.0",
"koa-router": "^7.4.0",
"koa-session": "^5.12.0",
"koa-static": "^5.0.0",
"mysql": "^2.17.1"
2. 主服务
引包
const fs = require('fs');
const path = require('path');
const Koa = require('koa');
const Router = require('koa-router');
const session = require('koa-session');
const ejs = require('koa-ejs');
const body = require('koa-better-body');
const _static = require('./routers/static');
const config = require('./config');
const app = new Koa();
const router = new Router();
错误处理
router.all('*', async (ctx, next) => { // * 表示所有的请求,都会经过这里的处理
try {
await next();
} catch (e) {
ctx.throw(500, e);
}
});
服务端渲染 koa-ejs
ejs(app, {
root: path.resolve(__dirname, 'template'), // 模版路劲
layout: false, // 使用 render 方法渲染模版时有所区别,如果省略,会去找 template/layout.ejs
// false: ctx.render('admin/index.ejs') 'abc': ctx.render('abc/admin/index.ejs')
viewExt: 'ejs',// 模版后缀名
cache: false, // 缓存
debug: false // 如果是 true,会把编译之后的内容全部输出
});
路由 koa-router
router.use('/admin', require('./routers/admin')); // localhost:8080/admin/xxx
router.use('/api', require('./routers/api')); // localhost:8080/api/xxx
router.use('', require('./routers/www')); // '' 表示根,localhost:8080/xxx
开放静态资源 koa-static
_static(router, {
imageMaxAge: config.imageMaxAge,
scriptMaxAge: config.scriptMaxAge,
styleMaxAge: config.styleMaxAge,
htmlMaxAge: config.htmlMaxAge,
otherMaxAge: config.otherMaxAge
});
/*
// 上面只是封装了, 比如
// ...
const static = require('koa-static');
// ...
router.all(/\.jsx?/i, static(path, options));
*/
session koa-session
1. .keys 文件是通过脚本生成的用来 session 签名的密钥,数组,每个元素都是无规律的不同字符组合
2. 这里可以使用同步读取文件的方式,因为是在启动服务的时候,只读取一次,所以,不会影响服务器性能
app.keys = fs.readFileSync('.keys').toString().split('\r\n');
app.use(session({
maxAge: 20 * 60 * 1000, // 缓存时间 20 分钟
renew: true // 自动续期
}, app));
处理 POST 数据 koa-better-body
app.use(body({
uploadDir: config.UPLOAD_DIR
}));
数据库 mysql co-mysql
1 app.context.db = require('./libs/database'); // app.context 相当于 ctx 的原型,所以,可以使用 ctx.db.query(sql语句) 来操作数据库
配置
1. 很多地方都需要 config,直接加到 app.context 上,通过 ctx.config 使用
app.context.config = config;
app.listen(config.HTTP_PORT, () => console.log(`Server running on ${config.HTTP_PORT}...`));
app.use(router.routes());
3. 数据库
const mysql = require('mysql');
const co = require('co-mysql');
const config = require('../config');
const conn = mysql.createPool({
host: config.DB_HOST,
user: config.DB_USER,
password: config.DB_PASS,
port: config.DB_PORT,
database: config.DB_NAME
});
module.exports = co(conn);
4. md5
const crypto = require('crypto');
const config = require('../config');
module.exports = {
// 生成 md5 值
md5 (buffer) {
const obj = crypto.createHash('md5');
obj.update(buffer + config.MD5_KEYS);
return obj.digest('hex');
}
};
Koa搭建简单服务器的更多相关文章
- Node安装及搭建简单服务器
注:本文安装系统为mac,windows及其他系统下载对应安装包 ,mac下载后的安装包为apk文件,windows为msi文件. 安装 1.在网上下载node安装包,官方网站2.双击下载文件,按步骤 ...
- 利用gulp搭建简单服务器,gulp标准版
var gulp = require('gulp'), autoprefixer = require('gulp-autoprefixer'), //自动添加css前缀 rename = requir ...
- nodeJs搭建简单服务器
实现简单的例子:hello word 把第一个文件命名为server.js 在server.js里写入 var http = require("http"); http.crea ...
- python3+socket搭建简易服务器
踩了一上午的坑之后,终于对网络编程有了一点大致的.基本的了解.真的是0基础,之前对socket网络编程一点都不知道.(感觉自己与时代脱轨....) 首先我想对这些美妙的专业术语进行一番搜索: 服务器: ...
- 使用 Nodejs 搭建简单的Web服务器
使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...
- Ubuntu 14.04搭建简单git服务器
/****************************************************************************** * Ubuntu 14.04搭建简单gi ...
- mongoDB介绍、安装、搭建简单的mongoDB服务器(一)
相关网站 1. http://www.mongodb.org/ 官网,可以下载安装程序,和doc,和驱动等. 2. http://www.mongoing.com/ 国内官方网站,博客,问题谈论等 ...
- 【netty】(2)---搭建一个简单服务器
netty(2)---搭建一个简单服务器 说明:本篇博客是基于学习慕课网有关视频教学.效果:当用户访问:localhost:8088 后 服务器返回 "hello netty"; ...
- 总结一下搭建简单Web服务器的一些方法
使用nodejs+anywhere模块搭建静态文件服务器 anywhere随时随地将你的当前目录变成一个静态文件服务器的根目录. 安装npm install anywhere -g,然后进入任意目录在 ...
随机推荐
- Asterisk 代码架构概述
from:http://blog.csdn.net/yetyongjin/article/details/7594447 近日分析Asterisk 1.8源码.Asterisk trunk上有这篇架构 ...
- idea 项目热部署设置
1.引入pom.xml() <!-- 热部署(必须) --> <dependency> <groupId>org.springframework.boot</ ...
- python 定义子类
- docker 与host互传文件
docker 的cp命令可以从容器往外复制,也可以从本机复制的容器. docker cp 文件路径 容器id:/容器目录 docker help cp Usage: docker cp [OPT ...
- IDEA-servlet项目创建web项目
准备:1. 安装jdk1.82. 安装tomcat9.0(idea只支持4.0 9.0的服务器) 一.创建并设置javaweb工程 1.创建javaweb工程File --> New --&g ...
- s3c6410时钟初始化
今天自己写bootloader做时钟初始化时遇到的问题,特记录下来.为了方便理解,我大部分都有截图, 在此我先说明下,图均来自数据手冊.也希望看了本篇文章的同志多多參看数据手冊才干理解的更加透 ...
- @atcoder - CODE FESTIVAL 2017 Final - J@ Tree MST
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 N 个点,第 i 点有一个点权 Xi,再给定一棵边带权的树 ...
- A - Archery Tournament 动态开点+vecotor 神仙题
存图还是像矩形一样的存,每个节点存所在区级内部的圆的编号,然后暴力判断,开始我也有这个想法,但是...这TM也能过...仔细想想,貌似好像是可以过,时间复杂度玄学无法证明.... #include&l ...
- @codeforces - 631E@ Product Sum
目录 @desription@ @solution@ @accepted code@ @details@ @desription@ 给定一个序列 a,定义它的权值 \(c = \sum_{i=1}^{ ...
- Datamation Index
Datamation Index Understand how to handle big data and improve organizational agility to support ...