Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/luwnto/koa-init
简单封装的开箱即用的koa框架
https://github.com/luwnto/koa-init
koa koa2 koajs nodejs
Last synced: 4 months ago
JSON representation
简单封装的开箱即用的koa框架
- Host: GitHub
- URL: https://github.com/luwnto/koa-init
- Owner: Luwnto
- License: mit
- Created: 2019-09-12T07:37:20.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-12-06T14:45:37.000Z (about 2 years ago)
- Last Synced: 2024-10-14T01:22:30.589Z (4 months ago)
- Topics: koa, koa2, koajs, nodejs
- Language: JavaScript
- Size: 441 KB
- Stars: 11
- Watchers: 2
- Forks: 1
- Open Issues: 8
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
## 写在前面
![](https://img.shields.io/badge/node-%3E%3D8.1.0-green) ![](https://img.shields.io/badge/mysql-%3E%3D5.7.0-red) ![](https://img.shields.io/badge/npm-%3E%3D6.0.0-brightgreen)
找了很久没找到合适的开箱即用的Koa框架, 自己动手造了一个, 封装了很多实用的功能, 集成了Mysql的CURD, 完成了一个登陆和注册的功能, 欢迎使用
## 开始使用
### 安装
从Git仓库下载或克隆项目到本地:
```
$ git clone [email protected]:Luwnto/koa-init.git
```进入到项目目录, 复制 `env.example.js` 到项目根目录, 名字改为 `env.js`:
```
$ cp env.example.js env.js
```修改env.js, 将数据库配置改成你的:
```
$ vim env.js
```安装依赖:
```
$ npm install
```执行数据迁移, 完成表创建:
```
$ npm run migrate
```运行项目:
```
$ npm run start
```浏览器中访问项目:
```
http://127.0.0.1:3000
```### 基本命令
如果你想更加方便的开发项目, 需要安装 `nodemon`:
```
$ sudo npm install -g nodemon
```测试环境启动:
```
$ npm run start
```生产环境启动, 同时开启守护进程:
```
$ npm run build
```测试环境启动, 同时开启守护进程(推荐开发使用):
```
$ npm run dev
```数据迁移(重新创建表):
```
$ npm run migrate
```> 测试环境会显示报错信息, 生产环境会显示404页面, 生产环境还会生成页面缓存
### 数据库模型和数据迁移
数据库模型文件写在 `modules` 目录下, 使用ORM操作数据库的时候引入模型文件即可
数据库模型文件代码示例:
```
const db = require('../utils/db');module.exports = db.defineModel('users', {
username: { // 账号
type: db.STRING(100),
unique: true
},
password: db.STRING(100), // 密码
gender: db.BOOLEAN, // 性别
avatar: db.STRING(100) // 头像
});
```创建好数据库模型文件之后, 执行迁移命令即可完成表创建:
```
$ npm run migrate
```> 注意迁移命令会清空所有表, 并重新创建, 生产环境禁用
### 路由
在项目启动的时候会自动扫描指定目录下的路由文件, 修改 `app.js` 的配置即可:
```
// 注册路由控制器
app.use(controller(['/controllers', '/controllers/home', '/controllers/admin']));
```路由和业务代码默认放在 `controllers` 目录下, 代码示例如下:
```
var index = async (ctx, next) => {
ctx.render('home/index.html');
};var error = async (ctx, next) => {
ctx.render('404.html');
};module.exports = {
'GET /': index,
'GET /404': error,
};
```### 模板渲染
使用 [Nunjucks](http://mozilla.github.io/nunjucks/) 模板引擎, 详细用户可以参考手册
for循环:
```
{% for t in test %}
{{ t.name }}
{% endfor %}
```if判断:
```
{% if test.name == 'li' %}
hello
{% else %}
world
{% endif %}
```### 全局变量
封装了部分变量到全局变量, 可以在模板引擎中直接使用:
```
{{ session.user.name }}
```你可以使用这些全局变量:
* session session相关的数据
* body post请求相关的数据
* query get请求query查询相关的数据
* path 请求的路径, 如果 /user你也可以在 `utils/templating.js` 文件中自行添加你需要的全局变量:
```
// 添加session到全局
env.addGlobal('session', ctx.session);
```### 数据库增删改查
添加一条数据:
```
// 引入模型文件
const User = require('../../models/User');// 插入数据库一条数据
var user = await User.create({
username: username,
password: crypto(password),
gender: 1,
avatar: '/public/img/avatar.png',
});
console.log(user);
```查询一条数据:
```
// 引入模型文件
const User = require('../../models/User');// 查询一条数据
var user = await User.find({
where: {
username: username
}
});
console.log(user);
```查询多条数据:
```
// 引入模型文件
const User = require('../../models/User');// 查询一条数据
var users = await User.findAll({
where: {
username: username
}
});
console.log(users);
```更新一条数据:
```
// 引入模型文件
const User = require('../../models/User');// 更新数据, 第一个参数是要更新的数据, 第二个参数是查询条件
var user = await User.update({
gender: 0,
}, {'where': {username: 'admin'}});
console.log(user);
```删除一条数据:
```
// 引入模型文件
const User = require('../../models/User');// 删除数据, 参数是查询条件
var user = await User.destroy({'where': {username: 'admin'}});
console.log(user);
```## 参考资料
[Koa-router](https://www.npmjs.com/package/koa-router)
[Nunjucks文档](https://nunjucks.bootcss.com/)
[Sequelize文档](https://sequelize.org/master/)
## LICENSE
[MIT](https://github.com/Luwnto/koa-init/blob/master/LICENSE)