littlewin-wang / Littlewin.server
Licence: mit
A blog backend server based on koa + mongoose.
Stars: ✭ 32
Programming Languages
javascript
184084 projects - #8 most used programming language
Projects that are alternatives of or similar to Littlewin.server
Koa Restful Boilerplate
Koa 2 RESTful API boilerplate
Stars: ✭ 146 (+356.25%)
Mutual labels: restful, mongoose, koa2
koa-restful-boilerplate
A boilerplate for koa2 RESTful API development
Stars: ✭ 31 (-3.12%)
Mutual labels: restful, koa2
express-rest-api
🍺 RESTful API sample in Express, Mongoose and ES6.
Stars: ✭ 28 (-12.5%)
Mutual labels: mongoose, restful
NodeRestApi
Node.js, Express.js and MongoDB REST API App
Stars: ✭ 38 (+18.75%)
Mutual labels: mongoose, restful
Node Typescript Mongodb
node js typescript mongodb express generator yo
Stars: ✭ 96 (+200%)
Mutual labels: restful, mongoose
task-manager
Open-source task manager based on Kanban. Made with vue.js, koa2, mongodb\mongoose.
Stars: ✭ 23 (-28.12%)
Mutual labels: mongoose, koa2
Koa Rest Api Boilerplate
💯 Boilerplate for Node.js Koa RESTful API application with Docker, Swagger, Jest, CodeCov and CircleCI
Stars: ✭ 420 (+1212.5%)
Mutual labels: restful, koa2
Koa2 Api Scaffold
一个基于Koa2的轻量级RESTful API Server脚手架。
Stars: ✭ 694 (+2068.75%)
Mutual labels: restful, koa2
Node Express Mongoose Passport Jwt Rest Api Auth
Node, express, mongoose, passport and JWT REST API authentication example
Stars: ✭ 146 (+356.25%)
Mutual labels: restful, mongoose
koa-better-router
❤️ Stable and lovely router for `koa`, using `path-match`. Foundation for building powerful, flexible and RESTful APIs easily.
Stars: ✭ 88 (+175%)
Mutual labels: restful, koa2
Watsonwebserver
Watson is the fastest, easiest way to build scalable RESTful web servers and services in C#.
Stars: ✭ 125 (+290.63%)
Mutual labels: restful, server
node-server
(@nestjs refactoring)⚡️My personal website's api server, a RESTful application that powered by @eggjs
Stars: ✭ 17 (-46.87%)
Mutual labels: mongoose, koa2
Es6 Express Mongoose Passport Rest Api
Lightweight boilerplate for Node RESTful API, ES6, Express, Mongoose and Passport 🎁
Stars: ✭ 36 (+12.5%)
Mutual labels: restful, mongoose
Resty
The minimalist framework of RESTful(server and client) - Resty
Stars: ✭ 1,268 (+3862.5%)
Mutual labels: restful, server
koa-rest-router
Most powerful, flexible and composable router for building enterprise RESTful APIs easily!
Stars: ✭ 67 (+109.38%)
Mutual labels: restful, koa2
Vue Blog
A single-user blog built with vue2, koa2 and mongodb which supports Server-Side Rendering
Stars: ✭ 586 (+1731.25%)
Mutual labels: mongoose, koa2
littlewin.server
A restful blog backend server based on koa + mongoose.
调试开发
- 开启Mongdb数据库
- 新建一个存放密码信息的文件至'~/key/littlewin-server' - 参考密码信息数据结构
# install dependencies
$ npm install # Or yarn install
# serve with hot reload at localhost:8090 (需全局安装nodemon)
$ npm run dev
# product mode
$ npm start
$ pm2 start ecosystem.config.js
数据模型设计
文章模型
{
title: { type: String, required: true, validate: /\S+/ }, // 文章标题
keywords: [{ type: String }], // 文章关键词
description: String, // 描述
content: { type: String, required: true, validate: /\S+/ }, // 文章内容
thumb: String, // 缩略图
state: { type: Number, default: 1 }, // 文章发布状态 => -1回收站,0草稿,1已发布
pub: { type: Number, default: 1 }, // 文章公开状态 = // -1私密,0需要密码,1公开
password: { type: String, default: '' }, // 文章密码 => 加密状态生效
tag: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Tag' }], // 文章标签
category: { type: mongoose.Schema.Types.ObjectId, ref: 'Category', required: true }, // 文章分类
meta: {
views: { type: Number, default: 0 },
likes: { type: Number, default: 0 },
comments: { type: Number, default: 0 }
}, // 其他元信息
createAt: { type: Date, default: Date.now }, // 创建时间
updateAt: { type: Date }, // 修改时间
extends: [{
name: { type: String, validate: /\S+/ },
value: { type: String, validate: /\S+/ }
}] // 扩展属性
})
分类模型
{
name: { type: String, required: true, validate: /\S+/ }, // 分类名称
description: String, // 描述
super: { type: Schema.Types.ObjectId, ref: 'Category' }, // 父分类
createAt: { type: Date, default: Date.now }, // 创建时间
updateAt: { type: Date }, // 修改时间
extends: [{
name: { type: String, validate: /\S+/ },
value: { type: String, validate: /\S+/ }
}] // 扩展属性
}
标签模型
{
name: { type: String, required: true, validate: /\S+/ }, // 标签名称
description: String, // 描述
createAt: { type: Date, default: Date.now }, // 创建时间
updateAt: { type: Date }, // 修改时间
extends: [{
name: { type: String, validate: /\S+/ },
value: { type: String, validate: /\S+/ }
}] // 扩展属性
}
评论模型
{
thirdID: { type: Number }, // 第三方评论id
postID: { type: Number, required: true }, // 评论所在文章id, 0代表系统留言板
pid: { type: Number, default: 0 }, // pid, 0代表默认留言
content: { type: String, required: true, validate: /\S+/ }, // content
isTop: { type: Boolean, default: false }, // 是否置顶
likes: { type: Number, default: 0 }, // 点赞数
author: {
name: { type: String, required: true, validate: /\S+/ },
email: { type: String, required: true, validate: /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/ },
site: { type: String, validate: /^((https|http):\/\/)+[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/ }
}, // 评论产生者
ip: { type: String }, // IP地址
ip_location: { type: Object }, // ip物理地址
agent: { type: String, validate: /\S+/ }, // 用户ua
state: { type: Number, default: 1 }, // 状态 0待审核/1通过正常/-1已删除/-2垃圾评论
createAt: { type: Date, default: Date.now }, // 创建时间
updateAt: { type: Date }, // 修改时间
extends: [{
name: { type: String, validate: /\S+/ },
value: { type: String, validate: /\S+/ }
}] // 扩展属性
}
用户模型
{
username: { type: String, default: '' }, // 用户名
password: {
type: String,
default: md5(config.AUTH.default.password)
}, // 密码
slogan: { type: String, default: '' }, // 签名
gravatar: { type: String, default: '' }, // 头像
extends: [{
name: { type: String, validate: /\S+/ },
value: { type: String, validate: /\S+/ }
}] // 扩展属性
}
站点信息模型
{
title: { type: String, required: true }, // 网站标题
sub_title: { type: String, required: true }, // 网站副标题
keywords: [{ type: String }], // 关键字
description: String, // 网站描述
site_url: { type: String, required: true }, // 站点地址
site_email: String, // 网站官邮
site_icp: String, // 备案号
links: [{ title: String, site: String, description: String }], // 友链
blacklist: {
ips: [{ type: String, validate: /\S+/ }],
mails: [{ type: String, validate: /\S+/ }],
keywords: [{ type: String, validate: /\S+/ }]
}, // 黑名单
meta: {
// 被喜欢次数
likes: { type: Number, default: 0 }
} // 其他元信息
}
接口设计
接口数据结构
-
HTTP状态码
- 401 权限不足或其他数据错误
- 404 项目中不存在
- 500 服务器挂了
- 200 正常
-
数据特征码
- success:
- true
- false
- message: 具体信息
- data: 具体数据
- success:
接口列表
.get('/', (ctx) => {
ctx.body = {
title: "littlewin.server API",
version: "v1",
author: "[email protected]",
site: "littlewin.wang",
guide: "https://github.com/littlewin-wang/littlewin.server/blob/master/README.md"
}
}) // 获取API接口信息
.get('/sitemap.xml', SiteMap.get) // 获取sitemap信息
.post('/user', User.login) // 用户登录
.get('/user', User.get) // 获取用户信息
.put('/user', middleware.verifyToken, User.modify) // 更新用户信息
.post('/category', middleware.verifyToken, Category.create) // 新建分类
.get('/category', Category.list) // 获取分类列表
.get('/category/:id', Category.get) // 获取单个分类信息
.put('/category/:id', middleware.verifyToken, Category.modify) // 更新单个分类信息
.delete('/category/:id', middleware.verifyToken, Category.delete) // 删除单个分类
.post('/tag', middleware.verifyToken, Tag.create) // 新建标签
.get('/tag', Tag.list) // 获取标签列表
.delete('/tag', middleware.verifyToken, Tag.deleteList) // 批量删除标签
.get('/tag/:id', Tag.get) // 获取单个标签信息
.put('/tag/:id', middleware.verifyToken, Tag.modify) // 更新单个标签信息
.delete('/tag/:id', middleware.verifyToken, Tag.delete) // 删除单个标签
.post('/article', middleware.verifyToken, Article.create) // 新建文章
.get('/article', Article.list) // 获取文章列表
.patch('/article', middleware.verifyToken, Article.patch) // 批量更新文章
.delete('/article', middleware.verifyToken, Article.deleteList) // 批量删除文章
.get('/article/:id', Article.get) // 获取单个文章信息
.put('/article/:id', middleware.verifyToken, Article.modify) // 更新单个文章信息
.delete('/article/:id', middleware.verifyToken, Article.delete) // 删除单个文章
.post('/comment', Comment.create) // 新建评论
.get('/comment', Comment.list) // 获取评论列表
.patch('/comment', middleware.verifyToken, Comment.patch) // 批量更新评论状态
.delete('/comment', middleware.verifyToken, Comment.deleteList) // 批量删除评论
.get('/comment/:id', Comment.get) // 获取单个评论信息
.put('/comment/:id', middleware.verifyToken, Comment.modify) // 更新单个评论信息
.delete('/comment/:id', middleware.verifyToken, Comment.delete) // 删除单个评论
.post('/like', Like.like) // 点赞
.get('/site', Site.get) // 获取站点信息
.put('/site', middleware.verifyToken, Site.modify) // 更新站点信息
Feature list
- [x] 文章/分类/标签/评论等 数据模型设计
- [x] 文章/分类/标签/评论等 接口设计
- [x] 增加extends属性
- [x] 非GET请求验证token
- [x] 增加评论过滤机制
- [x] 增加评论邮件提醒功能
- [x] 根据IP解析地址
- [x] 生成SITEMAP
- [x] 自动push新链到百度
- [x] 启用redis
- [x] 启用SSL
- [x] 增加事件系统
- [x] 增加公告系统
Contact
Email: [email protected]
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].