1

原材料

  • 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.schemaRestful API 的映射,并添加了其他的成熟功能模块,这也是我最近在拼命开发的一个中间件(或者说是插件),现在已经开源在github上,并发布在npm中。

现在有比较详细的中文文档,项目地址: seven

因为我现在学业比较重,所以开发速度不会特别快,但是我也会尽全力去维护这个开源项目,欢迎大家star使用。如果使用过程当中有任何问题,可以直接联系我,也可以直接动手维护,我会第一时间回应大家,也欢迎大家对这种无后端模式提出宝贵的建议。

邮箱: 610347922@qq.com

77即是正义
8 声望0 粉丝

代码改变世界。