zoukankan      html  css  js  c++  java
  • CentOS 环境 Node + Koa2 连接 MySQL (ECS系列三)

    Koa 搭建服务

    新建一个文件夹 koa_server,进入后

    cnpm i -S koa
    

    会生成 node_modules 依赖包,以及 package.json
    创建文件 server.js,并写入

    
    const Koa = require('koa');
    const app = new Koa();
    
    app.use( async ( ctx ) => {
      ctx.body = 'hello koa2'
    })
     
    app.listen(3000)
    console.log('app running at port 3000.');
    

    运行 node server.js即可,这是最简单的http服务。
    在ecs安全组,提前开放 3000 端口访问权限。
    浏览器中打开 localhost:3000 就能看到 koa 已经在运行。
    然后可以加入中间件(middleware)

    
    const Koa = require('koa');
    const app = new Koa();
    
    // logger
    app.use(async (ctx, next)=>{
      await next();
      const rt = ctx.response.get('X-Response-Time');
      console.log(`${ctx.method} ${ctx.url} - ${rt}`)
    })
    
    // x-response-time
    app.use(async (ctx, next)=>{
      const start = Date.now();
      await next();
      const ms = Date.now() - start;
      ctx.set('X-Response-Time', `${ms}ms`)
    })
    
    app.use( async ( ctx ) => {
      ctx.body = 'hello koa2'
    })
     
    app.listen(3000)
    console.log('app running at port 3000.');
    

    关于中间件,此处不再展开。
    koa 相关内容,可参考 Koa 2

    安装 MySQL 连接库

    cnpm i -S mysql
    

    创建文件 mysql/index.js

    
    var mysql = require('mysql');
    var connection = mysql.createConnection({
      host     : 'MySQL主机地址',
      user     : 'root',
      password : 'MySQL登录密码',
      database : 'MySQL数据库'
    });
    
    class Mysql {
        query (param) {
          return new Promise((resolve, reject) => {
            // user 数据表中查询 user_name 为 param 的数据
            connection.query(
            `SELECT * from user WHERE user_name='${param}'`,
            function (error, results, fields) {
                if (error) {
                  return reject(error)
                };
                resolve(results)
            });
          })
        }
    }
    
    module.exports = new Mysql()
    

    这样的配置,可以短期连接,在实际开发中,mysql连接会经常掉线。在这里,引入连接池,改写如下:

    
    var mysql = require('mysql');
    var pool = mysql.createPool({
      host     : 'MySQL主机地址',
      user     : 'root',
      password : 'MySQL登录密码',
      database : 'MySQL数据库'
    });
    
    class Mysql {
        connect(){
          return new Promise((resolve, reject) => {
            pool.getConnection((err, connection) => {
              if (err) {
                console.log("连接失败");
                reject(err)
              } else {
                resolve(connection)
              }
            })
          })
        }
        async query (param) {
          let connection = await this.connect()
          return new Promise((resolve, reject) => {
            // user 数据表中查询 user_name 为 param 的数据
            connection.query(`SELECT * from user WHERE user_name='${param}'`,(error, results)=>{
                if (error) {
                  return reject(error)
                };
                resolve(results)
            });
            //释放
            connection.release();
          })
        }
    }
    
    module.exports = new Mysql()
    

    然后在 server.js 中引用

    
    const Koa = require('koa');
    const app = new Koa();
    const mysql = require('./mysql/index');
    
    // logger
    app.use(async (ctx, next)=>{
      await next();
      const rt = ctx.response.get('X-Response-Time');
      console.log(`${ctx.method} ${ctx.url} - ${rt}`)
    })
    
    // x-response-time
    app.use(async (ctx, next)=>{
      const start = Date.now();
      await next();
      const ms = Date.now() - start;
      ctx.set('X-Response-Time', `${ms}ms`)
    })
    
    app.use(async (ctx) => {
        let data = await mysql.query()
        ctx.body = {
            "code": 10,
            "data": data,
            "mesg": 'ok'
        }
    })
     
    app.listen(3000)
    console.log('app running at port 3000.');
    
  • 相关阅读:
    dnn重置Host密码
    fiddle 网址过滤
    生成下面的模块时,启用了优化或没有调试信息
    关闭web.config的继承
    jQuery最佳实践
    坐标高速插入,移动和查询算法
    索引缓存方面的一些测试数据
    转帖微軟将从 .NET 4 以后的版本弃用 System.Data.OracleClient
    算法系列计数排序
    一款免费生成流程图的插件
  • 原文地址:https://www.cnblogs.com/_error/p/13231796.html
Copyright © 2011-2022 走看看