美文网首页vue系列
也许是最简单的node egg入门demo

也许是最简单的node egg入门demo

作者: litielongxx | 来源:发表于2018-03-25 16:50 被阅读0次

前言:

对于node能实现的后台比较感兴趣,大致看了下node和egg文档,了解了下基本的sql语句开始学习node了,发现教程的确比较少,记录分享一个egg的入门demo。

准备工作

egg-init

安装完node,npm,egg-init,egg-bin后使用egg-init egg-example --type=simple快速搭建项目,然后配置所需要的package.json的文件。页面渲染使用文档中的 Nunjucks ,访问数据库采用 egg-mysql

package.json:

在config/config/plugin.js下开启插件,config/config.default.js下配置关联和数据库信息。

// config/config/plugin.js
'use strict';

exports.nunjucks = {

    enable: true,

    package: 'egg-view-nunjucks'

};

exports.mysql = {

    enable: true,

    package: 'egg-mysql',

};
config/config.default.js
'use strict';

module.exports = appInfo => {
  const config = {
    // 渲染模板
    view:{
      defaultViewEngine:'nunjucks',
      mapping:{
        '.tpl':'nunjucks',
      }
    },
    mysql: {
      client: {
          // ip地址
          host: 'localhost',
          // 端口
          port: '3306',
          // 用户名
          user: 'root',
          // 密码
          password: '123456',
          // 数据库名
          database: 'test',   
      },
      app: true,
      agent: false,
  }
};
// use for cookie sign key, should change to your own and keep security
config.keys = appInfo.name + '_1521956862800_7591';
// add your config here
config.middleware = [];
  return config;
};

创建mysql模拟数据表

安装下载mysql,打开mysqlworkbench,初次打开设置密码123456。


新建数据库 新建表注意id自增长,int类型 上传成功

测试预览

npm run dev测试查看,默认127.0.0.1:7001端口。

app下新建view文件夹,新建.tpl文件模拟页面绑定ajax事件

app/view/index.tpl
<html>
  <head>
    <title>Egg Demo</title>
    <link href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.css" rel="stylesheet">
  </head>
  <body class="container">
    <input class="form-control" type="text"><br />
    <button class="btn btn-success">上传到数据库</button>
    <button class="btn btn-success">删除</button>
    <button class="btn btn-success">查询对应</button>
    <button class="btn btn-success">更新对应</button>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
    <script>
      $("button:eq(0)").click(function(){
        var data= $("input").val();
        if(data){
          $.ajax({
          type:'get',
          url:'/add/'+data,
          success:function(data){
              if(data == 'success'){
                  alert('上传成功!');
              }
            }
          });
        }
      });

      $('button:eq(1)').on('click',function(){
        var data= $("input").val();
         if(data){
          $.ajax({
          type:'get',
          url:'/del/'+data,
          success:function(data){
              if(data == 'success'){
                  alert('删除成功!');
              }
            }
          });
        }
      })

      //reach
      $('button:eq(2)').on('click',function(){
        var data= $("input").val();
         if(data){
          $.ajax({
          type:'get',
          url:'/get/'+data,
          success:function(data){
              if(data == 'success'){
                  alert('查询成功!');
              }
            }
          });
        }
      })

      $('button:eq(3)').on('click',function(){
        var data= $("input").val();
         if(data){
          $.ajax({
          type:'get',
          url:'/update/'+data,
          success:function(data){
              if(data == 'success'){
                  alert('更新成功!');
              }
            }
          });
        }
      })
    </script>
  </body>
</html>
简易请求页面

编写controller和配置router

controller控制器函数

//* 同等async yeild同等于函数中的return
module.exports = app => {
  class HomeController extends app.Controller {
    * index() {
      yield this.ctx.render('index.tpl');
    }
    // 新增 同理构建基于router对应的控制器
    * add() {
      const data = this.ctx.params.data;
      const result = yield this.service.mysql.add(data);
      this.ctx.body =result;
    }

    *del() {
      const data=this.ctx.params.data;
      const result = yield this.service.mysql.del(data);
      this.ctx.body = result;
    }
    
    // 查询
    *reach() {
      const data=this.ctx.params.data;
      const result=yield this.service.mysql.reach(data);
      this.ctx.body=result;
    }

    *update() {
      const data=this.ctx.params.data;
      const result=yield this.service.mysql.update(data);
      this.ctx.body=result;
    }

  }
  return HomeController;
};

router路由映射,其请求接口根据路径判断


/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  app.get('/', 'home.index');
  app.get('/add/:data','home.add');
  app.get('/del/:data','home.del');
  app.get('/get/:data','home.reach');
  app.get('/update/:data','home.update');

};
router对应请求地址的参数名和控制器

app下新建service,中间层处理mysql.js

module.exports=app=>{
    // 接受请求的参数,查询服务器,返回对应信息
   return class User extends app.Service{
        *add() {}
        *del() {}
        // ...
}

新增数据
this.app.mysql.insert('test',{'name'})

*add() {
            const data=this.ctx.params.data;
            // 表格名称test,数据库名称在config/config.default.js下已定义
            const result=yield this.app.mysql.insert('test',{
                // 时间优化下
                'data':new Date(+new Date()+8*3600*1000).toISOString().replace(/T/g,' ').replace(/\.[\d]{3}Z/,'')  ,
                'name':data
            });
            if(result.serverStatus == 2){
                return 'success';
           }else{
               return "fail";
           }
        }
上传a1到测试表 刷新查看

删除数据
this.app.mysql.delete('test',{name:data}

            const data = this.ctx.params.data;
            const result=yield this.app.mysql.delete('test',{
                name:data
            })
            console.log('result.affectedRows  '+result.affectedRows)
            if(result.affectedRows==1) {
                return result
            }else{
                return false
            }
        }

查询数据
单条查询
this.app.mysql.get('test',{ name:'a1'})
条件查询
this.app.mysql.select('sea_data')

 this.app.mysql.select('sea_data',{
                where: {v_name:data }, // WHERE 条件
                columns: ['v_name','v_pic','v_id'], // 要查询的表字段
                // orders: [], // 排序方式
                limit:5, 
                offset: 0, // 数据偏移量
  })
*reach() {
            const data = this.ctx.params.data;
            // get单条查询,select多条查询和全部 0这里表示查全部数据
            const result=data==0?yield this.app.mysql.select('sea_data'):yield this.app.mysql.select('sea_data',{
                where: {v_name:data }, // WHERE 条件
                columns: ['v_name','v_pic','v_id'], // 要查询的表字段
                // orders: [], // 排序方式
                limit:5, 
                offset: 0, // 数据偏移量
            })
            if(result) {
                return result;
            }else{
                return {
                    code:'1001',
                    data:'false'
                }
            }
        }

更新数据
this.app.mysql.update('test',{ id:'1', 'name':'ceshi'})

*update() {
            const data = this.ctx.params.data;
            console.log('更新数据'+data)
            const result=yield this.app.mysql.update('test',{
                id:'1',
                'name':'ceshi'
            })
         
            if(result) {
                return result;
            }else{
                return {
                    code:'1001',
                    data:'false'
                }
            }
        }

service/service.js

module.exports=app=>{
    // 接受请求的参数,查询服务器,返回对应信息
    return class User extends app.Service{
        *add() {
            const data=this.ctx.params.data;
            // 表格名称test,数据库名称在config/config.default.js下已定义
            const result=yield this.app.mysql.insert('test',{
                // 时间优化下
                'data':new Date(+new Date()+8*3600*1000).toISOString().replace(/T/g,' ').replace(/\.[\d]{3}Z/,'')  ,
                'name':data
            });
            if(result.serverStatus == 2){
                return 'success';
           }else{
               return "fail";
           }
        }

        *del() {
            const data = this.ctx.params.data;
            const result=yield this.app.mysql.delete('test',{
                name:data
            })
            console.log('result.affectedRows  '+result.affectedRows)
            if(result.affectedRows==1) {
                return result
            }else{
                return false
            }
        }

        *reach() {
            const data = this.ctx.params.data;
            // get单条查询,select多条查询和全部 0这里表示查全部数据
            const result=data==0?yield this.app.mysql.select('sea_data'):yield this.app.mysql.select('sea_data',{
                where: {v_name:data }, // WHERE 条件
                columns: ['v_name','v_pic','v_id'], // 要查询的表字段
                // orders: [], // 排序方式
                limit:5, 
                offset: 0, // 数据偏移量
            })
            if(result) {
                return result;
            }else{
                return {
                    code:'1001',
                    data:'false'
                }
            }
        }
        
        *update() {
            const data = this.ctx.params.data;
            console.log('更新数据'+data)
            const result=yield this.app.mysql.update('test',{
                id:'1',
                'name':'ceshi'
            })
         
            if(result) {
                return result;
            }else{
                return {
                    code:'1001',
                    data:'false'
                }
            }
        }
      
    }
}

相关文章

  • 也许是最简单的node egg入门demo

    前言: 对于node能实现的后台比较感兴趣,大致看了下node和egg文档,了解了下基本的sql语句开始学习nod...

  • egg.js入门示例

    egg入门示例 1、egg.js简介 egg.js是阿里巴巴开源的基于node.js封装的框架,为企业级框架和应用...

  • node爬虫最简单的demo

    1.安装node 2.新建一个文件夹,文件夹里新建一个game.js 3.安装模块 在命令行输入安装模块命令:np...

  • egg-从入门到上线 (下)

    因为egg知识点丰富,分为上下两章点击见上章 egg-从入门到上线 (下) 10 阿里监控 Node.js 性能平...

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

    相关说明 Egg.js(以下简称Egg) Express 是 Node.js 社区广泛使用的框架,简单且扩展性强,...

  • egg笔记

    创建egg项目 npm i egg-init -g egg-init egg-demo --type=simpl...

  • egg部署到heroku

    前两天学习了node部署到heroku的入门文档 出了好多框架,也看了狼叔的框架大战,最后我选择egg作为以后的学...

  • rocketmq总目录

    实战 rocketmq最简单的入门demo rocketmq的常用概念,接口和方法 rocketmq的正式部署 高...

  • node:egg.js入门

    前提情况 目前公司团队遇到了新的问题,在开发过程中,往往遇到了项目开发瓶颈,前后端互相之间合作变得越来越困难。总结...

  • 阿里Eggjs后端框架

    node 从接触 Koa2 到上手 Egg2 之接触 Egg2 安装 node 至Node.js 官网下载 nod...

网友评论

    本文标题:也许是最简单的node egg入门demo

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