recatch-service
recatch-service copied to clipboard
Service repository for reactch.
博客项目第二版后端代码 代号 recatch-service
该项目作为博客的后端代码,主要为 recatch 及 recatch-ui 提供数据接口。 使用 Koa 框架,用 Typescript 进行编写,使用 IWinter 进行路由转控制器的处理。 IWinter 基于 Typescript 的装饰器功能,路由编写更清晰!
路由编写
1.
基于 Iwinter 进行 控制器 及 路径 级别的权限控制更清晰 :)
2.
使用 async/await 进行异步代码的编写更舒服 :)
import { POST, GET, PUT, DELETE, Path, CtxParam, BodyParam, PathParam } from 'iwinter';
import Label from '../models/Label';
import { userLoginAuth } from '../auth';
import { buildResponse } from '../utils';
@Path('/api/labels', userLoginAuth)
class LabelController {
/**
* 根据用户查询标签
*/
@Path('/get-by-user')
@GET
async getLabelsByUser( @CtxParam('ctx') ctx: any) {
let { userId } = ctx.session.userInfo;
let labels = await Label.findByUserId(userId);
return buildResponse(null, labels);
}
/**
* 增加标签
*/
@Path('/')
@POST
async addLabel( @CtxParam('ctx') ctx: any, @BodyParam('label') label: any) {
let { userId } = ctx.session.userInfo;
label['userId'] = userId;
let newLabel = new Label(label);
let result = await newLabel.save();
return buildResponse(null, result);
}
/**
* 修改标签
*/
@Path('/:id')
@PUT
async modifyLabel( @PathParam('id') id: any, @BodyParam('label') label: any, @CtxParam('ctx') ctx: any) {
let { userId } = ctx.session.userInfo;
label['userId'] = userId;
let result = await Label.findByIdAndUpdate(id, { $set: label }, { new: true });
return buildResponse(null, result);
}
/**
* 删除标签
*/
@Path('/:id')
@DELETE
async deleteLabel( @PathParam('id') id: any) {
let result = await Label.findByIdAndRemove(id);
return buildResponse(null, { _id: id});
}
}
export default LabelController;
如何运行
1.
git clone https://github.com/yvanwangl/recatch-service.git
2.
cd recatch-service && npm install
3.
npm run start
项目构建
1.
通过 npm run build
进行项目构建
项目部署
该项目支持两种部署方式:
1.
基于node环境部署:npm run start:prod
注意: 运行前需要对环境变量进行配置
该方式的部署需要修改根目录下的 ecosystem.config.js
文件
env_production: {
"PORT": 8082,
"NODE_ENV": "production",
"MONGODB_HOST": '',
"MONGODB_DATABASE":'',
"MONGODB_PORT":'',
"MONGODB_USER":'',
"MONGODB_PWD":'',
"SERVER_HOST":'',
"QINIU_DOUPLOAD":'',
"QINIU_PUBLIC_BUCKET_DOMAIN":'',
"QINIU_ACCESS_KEY":'',
"QINIU_SECRET_KEY":'',
"QINIU_BUCKET":'',
"EMAIL_HOST":'',
"EMAIL_PORT":'',
"EMAIL_USER":'',
"EMAIL_PASS":'',
"REGISTOR":''
}
2.
部署 docker 容器:
首先构建 docker 镜像,需要在项目根目录下运行:docker build --rm -f Dockerfile -t recatch-service:latest .
然后使用 docker-compose 运行容器:docker-compose up -d
注意: 运行前需要对环境变量进行配置
该方式的部署需要修改根目录下的 docker-compose.yml
文件
environment:
- MONGODB_PWD=
- EMAIL_PASS=
- QINIU_BUCKET=
- MONGODB_PORT=
- SERVER_HOST=
- QINIU_DOUPLOAD=
- REGISTOR=
- QINIU_SECRET_KEY=
- QINIU_ACCESS_KEY=
- MONGODB_USER=
- QINIU_PUBLIC_BUCKET_DOMAIN=
- EMAIL_PORT=
- EMAIL_HOST=
- EMAIL_USER=
- MONGODB_DATABASE=
- MONGODB_HOST=
配置参数说明:
PORT:服务端口号 NODE_ENV:环境变量 MONGODB_HOST:Mongo 服务器地址,本机为 localhost / 127.0.0.1 MONGODB_PORT:Mongo 服务器端口,默认为 27017 MONGODB_DATABASE: Mongo 数据库名称 MONGODB_USER:Mongo 数据库用户名,没有默认为 '' MONGODB_PWD:Mongo 数据库密码,没有默认为 '' SERVER_HOST:服务器地址,主要为上传图片时返回图片 url 拼接使用 QINIU_DOUPLOAD:参数配置,是否上传图片到七牛,如果该项配置为 false ,则其他的 QINIU_* 均不需配置 QINIU_PUBLIC_BUCKET_DOMAIN:七牛存储空间的外链默认域名 QINIU_ACCESS_KEY: 七牛个人的两对密钥(Access/Secret Key) QINIU_SECRET_KEY: 七牛个人的两对密钥(Access/Secret Key) QINIU_BUCKET: 七牛存储空间名称 EMAIL_HOST: 发送邮件服务器 ,如果使用腾讯邮箱,则为 smtp.qq.com EMAIL_PORT:发送邮件服务器端口 EMAIL_USER: 发送邮件的用户,为个人邮箱 EMAIL_PASS:发送邮件的验证密码,具体设置参考 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件) REGISTOR: 是否开放注册功能
由于该项目采用前后端分离的方式进行开发,该项目为后端部分,所以还需要部署前端服务项目 recatch recatch-ui
欢迎Star,有问题请提 issue :)