19

Egg.js+MongoDB+uni-app 开发小程序 (一) 项目后台基搭建

 3 years ago
source link: https://studygolang.com/articles/31499
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

相关说明

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

有疑问加站长微信联系(非本文作者)

eUjI7rn.png!mobile

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK