5分钟构建一个Restful后端

原材料

  • expressgit

  • mongoosegithub

  • seven-expressmongodb

  • express-session数据库

Start

  • 使用npm安装 express脚手架express

    $ npm install -g --save express express-generator
  • 初始化项目npm

    默认是使用Jade模版,可使用--view== 来指明其余的模版.
    $ express seven-test
    $ cd seven-test
    $ npm install
    $ npm install mongoose seven-express express-session

Configure

进行 app.js 配置

默认的配置比较繁琐,咱们先来精简一下配置文件,只留下咱们须要的部分,若是还须要其余的中间件能够后面自行配置。json

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 属性。cookie

const mongoose = require('mongoose');
    
let User = new mongoose.Schema({
 // 用户名
 username: String,
 // 密码
 password: String,
 // 用户身份
 role: String,
});
    
module.exports = User;

添加 seven 的配置文件

自定义配置能够参照后面的seven中间件的介绍,这里给出样例。session

{
  "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
相关文章
相关标签/搜索