美文网首页
Egg.js+MongoDB+uni-app 开发小程序 (一)

Egg.js+MongoDB+uni-app 开发小程序 (一)

作者: 大王派你去巡山 | 来源:发表于2020-11-08 10:18 被阅读0次

    相关说明

    Egg.js(以下简称Egg)

    Express 是 Node.js 社区广泛使用的框架,简单且扩展性强,非常适合做个人项目。但框架本身缺少约定,标准的 MVC 模型会有各种千奇百怪的写法。Egg 按照约定进行开发,奉行『约定优于配置』,团队协作成本低。

    Sails 是和 Egg 一样奉行『约定优于配置』的框架,扩展性也非常好。但是相比 Egg,Sails 支持 Blueprint REST API、WaterLine 这样可扩展的 ORM、前端集成、WebSocket 等,但这些功能都是由 Sails 提供的。而 Egg 不直接提供功能,只是集成各种功能插件,比如实现 egg-blueprint,egg-waterline 等这样的插件,再使用 sails-egg 框架整合这些插件就可以替代 Sails 了。

    Egg的特性

    • 提供基于 Egg 定制上层框架的能力

    • 高度可扩展的插件机制

    • 内置多进程管理

    • 基于Koa开发,性能优异

    • 框架稳定,测试覆盖率高

    • 渐进式开发

    MongoDB(4.2)

    MongoDB是一个基于分布式文件存储 [1] 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

    它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

    • 面向集合存储,易存储对象类型的数据。

    • mongodb集群参考

    • 模式自由。

    • 支持动态查询。

    • 支持完全索引,包含内部对象。

    • 支持查询。

    • 支持复制和故障恢复。

    • 使用高效的二进制数据存储,包括大型对象(如视频等)。

    • 自动处理碎片,以支持云计算层次的扩展性。

    • 支持 Golang,RUBY,PYTHON,JAVA,C++,PHP,C#, NODE等多种语言。

    • 文件存储格式为BSON(一种JSON的扩展)。

    • 可通过网络访问。

    Mongoose

    Node.js 的MongoDB ORM

    uni-app

    uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。

    DCloud公司拥有600万开发者用户,几十万应用案例、12亿手机端月活用户,数千款uni-app插件、70+微信/qq群。阿里小程序工具官方内置uni-app(详见),腾讯课堂官方为uni-app录制培训课程(详见),开发者可以放心选择。

    uni-app在手,做啥都不愁。即使不跨端,uni-app也是更好的小程序开发框架(详见)、更好的App跨平台框架、更方便的H5开发框架。不管领导安排什么样的项目,你都可以快速交付,不需要转换开发思维、不需要更改开发习惯。

    tree new bee

    环境需求

    Nodejs 建议选择 LTS 版本,最低要求 8.x
    MongoDB 建议使用4.2版本
    Redis 最新版本

    安装及配置

    nodejs 的安装请查看对应的官方文档

    Egg 安装

    $ mkdir egg-example && cd egg-example
    $ npm init egg --type=simple
    $ npm i
        ```
    ```JavaScript
    $ npm run dev
    $ open http://localhost:7001
    

    MongoDB

    提供linux RedHat(CentOS)安装示例:

    CentOS 去掉sudo

    创建 /etc/yum.repos.d/mongodb-org-4.2.repo

    文件内容为:

    [mongodb-org-4.2]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

    安装基础

    sudo yum install -y mongodb-org

    安装控制

    sudo yum install -y mongodb-org-4.2.10 mongodb-org-server-4.2.10 mongodb-org-shell-4.2.10 mongodb-org-mongos-4.2.10 mongodb-org-tools-4.2.10

    启动

    sudo systemctl start mongod

    安装项目所需插件

    1.egg-jwt 标准TOKEN生成校验
    2.egg-mongoose MongoDB Nodejs ORM
    3.egg-cors插件 跨域插件
    4.egg-validate 数据校验插件
    4.lodash JS函数库
    5.momentjs JS时间处理函数库
    6.request http处理包(貌似已弃用)
    7.request-promise-native request promise化包(也可用nodejs自带)
    8.stream-to-array,stream-wormhole egg上传内存销毁相关包

    附package.json

      "devDependencies": {
        "autod": "^3.0.1",
        "autod-egg": "^1.1.0",
        "await-stream-ready": "^1.0.1",
        "egg-bin": "^4.11.0",
        "egg-ci": "^1.11.0",
        "egg-cors": "^2.2.3",
        "egg-jwt": "^3.1.7",
        "egg-mock": "^3.21.0",
        "egg-mongoose": "^3.3.0",
        "egg-validate": "^2.0.2",
        "eslint": "^5.13.0",
        "eslint-config-egg": "^7.1.0",
        "lodash": "^4.17.20",
        "moment": "^2.28.0",
        "request": "^2.88.2",
        "request-promise-native": "^1.0.9",
        "stream-to-array": "^2.3.0",
        "stream-wormhole": "^1.1.0"
      },
    

    egg 插件配置文件 /config/plugin.js

    'use strict';
    
    /** @type Egg.EggPlugin */
    exports.validate = {
        enable: true,
        package: 'egg-validate',
    };
    exports.mongoose = {
        enable: true,
        package: 'egg-mongoose',
    };
    exports.jwt = {
        enable: true,
        package: "egg-jwt"
    };
    exports.cors = {
        enable: true,
        package: 'egg-cors',
    };
    
    exports.redis = {
        enable: true,
        package: 'egg-redis',
    };
    

    egg 配置文件 /config/

    /* eslint valid-jsdoc: "off" */
    
    'use strict';
    
    /**
     * @param {Egg.EggAppInfo} appInfo app info
     */
    module.exports = appInfo => {
        /**
         * built-in config
         * @type {Egg.EggAppConfig}
         **/
        const config = exports = {};
    
        // use for cookie sign key, should change to your own and keep security
        config.keys = appInfo.name + '_1600096669632_8743';
    
        config.middleware = ['fm', 'errorHandler', 'responseFormatter', 'jwtErrorHandler'];
        // csrf 设置
        config.security = {
            csrf: {
                enable: false,
                ignoreJSON: true
            },
            domainWhiteList: ['http://localhost', 'http://127.0.0.1', '*']
        };
        // 跨域
        config.cors = {
            origin: '*',
            allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS',
            credentials: true,
        };
        // 小程序配置
        config.wxmpCf = {
            appid: '您的小程序APPID',
            secret: '您的小程序密钥'
        };
        // 项目可能回连接多个/多种数据库 这里我们默认只使用mp的MongoDB数据库
        config.mongoose = {
            clients: {
                basic: {
                    url: 'mongodb://127.0.0.1:27017/您的数据库名称',
                    options: {},
                },
                mp: {
                    url: 'mongodb://127.0.0.1:27017/您的数据库名称2',
                    options: {},
                }
            },
        };
        // 代理获取真实IP
        config.proxy = true;
        // 地图接口设置
        config.wmap = {
            amap: { key: '高德地图key' },
            txmap: { key: '腾讯地图key' }
        };
        // add your user config here
        const userConfig = {
            // myAppName: 'egg',
        };
        return {
            ...config,
            ...userConfig,
        };
    };
    

    项目目录结构

    • app 项目主目录
      • controller 控制目录
      • extend 扩展
      • libs 第三方代码
      • middlewear 中间件
      • model 数据库模型
      • public 静态文件
      • router 路由(路由太多的情况使用)
      • rules 数据校验文件
      • schedule 定时任务
      • service 服务
      • view 页面模板
        router.js 路由文件
    • config
      • config.default.js 项目配置文件
      • plugin egg插件
        app.js
        agent.js

    相关文章

      网友评论

          本文标题:Egg.js+MongoDB+uni-app 开发小程序 (一)

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