zoukankan      html  css  js  c++  java
  • egg.js与mysql的结合使用,以及部署事项

    最近使用egg.js写了一个小项目练手,主要用来封装接口以及代理接口。进入正题:

    egg搭建以及各项配置 可以详见官方文档:https://eggjs.org,这里简单描述一下:

    1.直接使用脚手架快速搭建项目,命令如下:

        (1)npm i egg-init -g;

     (2)新建egg-demo文件夹,执行命令:egg-init egg-demo --type=simple;

        (3)进入当前文件夹下,执行命令:npm i;

     (4)启动项目:npm run dev;

               在浏览器中打开:localhost:7001

               注意:这里默认地址是7001,如果修改,可以在package.json里面配置:egg-scripts start --port=要修改的端口号 --daemon --title=egg-server-egg-demo.

    2.实现接口:

        (1)在controller文件夹下,新建自己的文件,开始业务书写,这里个人建议可以新建service文件夹,在里面书写自己的复杂业务逻辑,而controller用来接收返回给页面展示;

      (2)plugin.js用来定义插件;config.default.js用做基本配置,同时自己也可以新建文件来区分开发环境、测试环境以及线上环境;

     (3)代理接口,可以参考 https://blog.csdn.net/baidu_33438652/article/details/81736832

        这里简单说一下get、post两种常用的请求方法。

        get:

          const result = await this.ctx.curl(代理的接口地址,{dataType: 'json'});

        post:

          const result = await this.ctx.curl(代理的接口地址,{
            // 必须指定 method,默认为get
            method:'POST',
            // 通过 contentType 告诉 HttpClient 以 JSON 格式发送
            contentType: 'json',
            data: 请求参数,
            // 明确告诉 HttpClient 以 JSON 格式处理返回的响应 body
            dataType: 'json'
          });

    3.mysql数据库使用:

        (1)mysql安装:npm i egg-mysql  --save,然后在plugin.js里面配置如下:       

      exports.mysql = {
        enable: true,
        package: 'egg-mysql',
      };

      config.default.js配置如下:

        config.mysql = {
          client: {
            // host
            host: '',
            // 端口号
            port: '',
            // 用户名
            user: '',
            // 密码
            password: '',
            // 数据库名
            database: ''
          },
          // 是否加载到 app 上,默认开启
          app: true,
          // 是否加载到 agent 上,默认关闭
          agent: false,
        };

         这里建议本机安装mysql数据库(https://dev.mysql.com/downloads/file/?id=481160),以及navicat界面管理工具,这样就可以验证自己有没有操作数据库。

      (2)数据库的增删改查语法,官网都有实例,可以参考,这里对更新数据库简单说一下:

        let row = {

          password(修改的字段): newPassword(要修改的值)
        },
        options = {
          where: {
            username(查询的条件):username(查询的值),
          }
        };
        await this.app.mysql.update('数据库名', row, options);

           注意:mysql服务器没有开启,或者配置有误,都会造成项目运行时报错,对应修改就可以了~~~  

    3.redis使用:

      写接口时,一定会遇到数据存储的问题,这个时候我们通常采用redis存储数据,而非cookie或者storage(一般用于客户端存储)。

      (1)redis安装:npm i egg-redis --save,然后在plugin.js里面配置如下:       

        exports.redis= {
          enable: true,
          package: 'egg-redis',
        };

        config.default.js配置如下:

          config.redis = {
            client: {
              port:, // Redis port
              host: '', // Redis host
              password: '',//密码
              db: 1//存储区
            }
          };

                   注意:redis本身不需要密码的(可以设置),但是在redis配置时,password为必须的,否则会报错,大家可以自行验证。

      (2)redis用法(可以下载RedisDesktopManager界面管理工具查看存储情况。):

        a.正常存储用法:await app.redis.set('key值', 存储值);

        b.一般我们也会遇到对例如token这样存储值时效的设置,代码如下:await app.redis.set('key值', 存储值,'EX',seconds);

        c.也可以通过命令行设置:

           命令启动方法:

           通过cmd命令到redis msi(个人安装包存放位置)目录下,执行命令,如:f:software edis msi>redis-server.exe redis.windows.conf;

           新开窗口执行 F:software edis msi>redis-cli.exe -h 127.0.0.1 -p 6379。

           然后输入命令:expire key seconds。    

    4.项目部署与应用:

     (1)在该文件下打包,生成tgz文件:tar -zcvf ../FileName.tgz .

     (2)环境部署(建议下载Xshell客户端,当然别的工具都可以,根据个人喜好~~~):     

        a.进入要部署的服务器对应文件夹下,cd 等等;

        b.//创建文件 mkdir 文件名称;

        c.打开压缩包: rz -be;

        d.解包:tar zxvf FileName.tar;

        e.移除压缩包: rm -rf  FileName.tar

      然后就可以启动啦:npm start即可。

           注意:要根据自己的项目环境运行npm start,默认运行npm start为线上环境 prod,建议大家在不同环境下区分运行:

                      开发环境:egg_server_env=local npm start

                      线上环境:egg_server_env=prod npm start

                      测试环境:egg_server_env=unittest npm start

    至此,讲解完了,对于有异议或者有更好处理方法的地方上,欢迎交流与评论~~~

  • 相关阅读:
    wget一个小技巧
    【iOS官方文档翻译】UICollectionView与UICollectionViewFlowLayout
    NSDate获取当前时区的时间
    怎样把一个字典的数据添加到另一个字典中?
    CoreLocation基本使用
    iOS开发--一步步教你彻底学会『iOS应用间相互跳转』
    Save Image to UserDefaults(用NSUserDefaults保存图片)
    SDWebImage源码解析
    获取cell或者cell中的控件在屏幕中的位置
    Git命令详解 123
  • 原文地址:https://www.cnblogs.com/sunflower-zy/p/10245195.html
Copyright © 2011-2022 走看看