原材料
- express
- mongoose
- seven-express
- express-session
Start
-
使用npm安装 express 和 脚手架
$ npm install -g --save express express-generator
-
初始化项目
默认是使用Jade模版,可以使用--view== 来指明其他的模版.
$ express seven-test $ cd seven-test $ npm install $ npm install mongoose seven-express express-session
Configure
进行 app.js
配置
默认的配置比较繁琐,我们先来精简一下配置文件,只留下我们需要的部分,如果还需要其他的中间件可以后面自行配置。
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
module.exports = app;
下面我们来进行进一步的配置,将我们需要的中间件引入进来,并配置。
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var mongoose = require('mongoose');
var seven = require('seven-express');
var router = express.Router();
var app = express();
// 连接数据库
mongoose.connect('mongodb://localhost:27017/Test');
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// 添加session中间件
app.use(session({
secret: '12345',
name: 'seven-test',
cookie: {maxAge: 80000 },
resave: false,
saveUninitialized: true
}));
// 添加seven中间件
seven.creator(app, router, path.join(__dirname, 'schema'));
module.exports = app;
添加 schema
在项目目录下添加 schema
文件夹,然后在里面添加各种mongoose的schema文件。如果需要seven的权限管理功能,则默认需要添加 user
表,并添加 username
, password
, role
属性。
const mongoose = require('mongoose');
let User = new mongoose.Schema({
// 用户名
username: String,
// 密码
password: String,
// 用户身份
role: String,
});
module.exports = User;
添加 seven
的配置文件
自定义配置可以参照后面的seven中间件的介绍,这里给出样例。
{
"rule": {
"user" : {
"Create": {
"key": "username",
"bodyList": ["username", "role"]
},
"Update": {
"bodyList": ["username"]
}
}
},
"authority": {
"role": ["admin", "user", "superadmin"],
"filter": {
"user": {
"Create": false,
"Retrieve": ["admin"],
"Update": ["user", "admin", "superadmin"]
}
}
}
}
Run
现在就能把整个项目run起来。
$ npm start
如果正常,会出现
users
Pagination get /user/page/:page
Create post /user
Delete delete /user/:id
Update put /user/:id
Login post /login
Retrieve get /user/:id
这些就是对于 schema
自动映射得到的 Restful API,具有可配置的参数检查功能,具有可配置的权限管理功能。
到现在我们没有写一行代码,就实现了整个 Restful API 的后端功能。
Seven-express
那我们到底是如何做到这样的自动化映射的呢?
好吧,主要是 seven-express
实现的从 Mongoose.schema 到 Restful API 的映射,并添加了其他的成熟功能模块,这也是我最近在拼命开发的一个中间件(或者说是插件),现在已经开源在github上,并发布在npm中。
现在有比较详细的中文文档,项目地址: seven
因为我现在学业比较重,所以开发速度不会特别快,但是我也会尽全力去维护这个开源项目,欢迎大家star使用。如果使用过程当中有任何问题,可以直接联系我,也可以直接动手维护,我会第一时间回应大家,也欢迎大家对这种无后端模式提出宝贵的建议。
邮箱: 610347922@qq.com