美文网首页iOS第三方node@IT·互联网
5分钟构建一个Restful后端

5分钟构建一个Restful后端

作者: 77即是正义 | 来源:发表于2017-04-21 09:54 被阅读840次

    原材料

    • 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
    

    相关文章

      网友评论

      • 86154eee582d:一行代码都不写就可以实现后端的功能吗?我现在是java初学者,如果要搭建类似的框架,一般需要用的springMVC,spring,mybatis。请问你现在用的是什么方面的知识和框架?
        77即是正义:主要是使用nodejs实现的,现在主要是对简单的restfulapi进行了封装,对复杂的逻辑还是不能得到实现。所以我也在想更好的解决办法,如果有什么好的建议,可以联系我。
        孤独的探索号:java可以看看这个,一行代码都不用写,跑起来就行了
        APIJSON,让接口和文档见鬼去吧!
        https://github.com/TommyLemon/APIJSON
        下载试用客户端App
        http://files.cnblogs.com/files/tommylemon/APIJSONApp.apk
        梁同桌:楼主用的node.js , 并不是很复杂就能实现。
      • HongyangWang:赞!
        HongyangWang:@77即是正义 好!
        77即是正义:谢谢,如果使用中有什么问题,可以直接联系我。

      本文标题:5分钟构建一个Restful后端

      本文链接:https://www.haomeiwen.com/subject/tazrzttx.html