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
相關文章
相關標籤/搜索