nodejs插件knex & 日志打印

Posted 原莱_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs插件knex & 日志打印相关的知识,希望对你有一定的参考价值。

knex

  npm install -save knex
  • 引入,封装
const dbconfig = require('../config/index');
const knex = require('knex')(
    client: 'mysql',
    connection: dbconfig,
    log: 
        error (message) 
            console.log('[knex error]', message)
        
    
)
class Base
  //查询
  all (tableName,where,who)
    return knex(tableName).where(where).select(...who)
  
  // 新增
  insert (tableName,params)
    return knex(tableName).insert(params);
  
  // 更改
  update (tableName,id, params)
    return knex(tableName).where('id', '=', id).update(params);
  
  // 删除
  delete (tableName,id)
    return knex(tableName).where('id', '=', id).del();
  
  //查询双表
  selectab(aobj,bobj)
    return knex( a:aobj.name, b:bobj.name)
    .select(
      auser: `a.$aobj.out`,
      bupload: `b.$bobj.out`
    )
    .whereRaw('?? = ??', [`a.$aobj.where`, `b.$bobj.where`])
  

// 测试------start
// let db = new Base()

//1、select
// db.all('user',id:'33',['name']).then(res=>
//   console.log(res);
// ).catch(e=>
//   console.log(e);
// )

//2、insert
// db.insert('user',name:'lisa',password:'123456').then(res=>
//   console.log(res);
// ).catch(e=>
//   console.log(e);
// )

//3、update
// db.update('user',36,name:'jenny').then(res=>
//   console.log(res);
// ).catch(e=>
//   console.log(e);
// )

// 4、delete
// db.delete('user',35).then(res=>
//   console.log(res);
// ).catch(e=>
//   console.log(e);
// )

// 5、selectab
// db.selectab(name:'user',out:'name',where:'relation',name:'upload',out:'name',where:'id').then(res=>
//   console.log(res);
// ).catch(e=>
//   console.log(e);
// )

// 测试------end
module.exports = new Base();

  • 运行测试
node utils/knex.ts

打印日志

  • npm i winston
    
  • 根目录添加一个配置打印日志格式的文件 logger.js文末有github地址,内参考logger.js

    const  createLogger, format, transports  = require('winston');
    const fs = require('fs');
    const path = require('path');
    
    const env = process.env.NODE_ENV || 'development';
    const logDir = 'log';
    
    // Create the log directory if it does not exist
    if (!fs.existsSync(logDir)) 
      fs.mkdirSync(logDir);
    
    
    const filename = path.join(logDir, 'results.log');
    
    const logger = createLogger(
      // change level if in dev environment versus production
      level: env === 'production' ? 'info' : 'debug',
      format: format.combine(
        format.label( label: path.basename(process.mainModule.filename) ),
        format.timestamp( format: 'YYYY-MM-DD HH:mm:ss' )
      ),
      transports: [
        new transports.Console(
          format: format.combine(
            format.colorize(),
            format.printf(
              info =>
                `$info.timestamp $info.level [$info.label]: $info.message`
            )
          )
        ),
        new transports.File(
          filename,
          format: format.combine(
            format.printf(
              info =>
                `$info.timestamp $info.level [$info.label]: $info.message`
            )
          )
        )
      ]
    );
    
    module.exports = logger;
    
  • app.js内请求错误处理的部分删掉,更改为打印日志

    const logger = require('./logger')
    app.use(function(err, req, res, next) 
      logger.error(`$req.method $req.originalUrl ` + err.message)
      const errmsg = err.message
      res.status(err.status||500).json(
        code:-1,
        success:false,
        message:errmsg,
        data: 
      )
    );
    

参考:

Node.js + Express + MySQL 搭建项目框架

winston

Knex.js

以上是关于nodejs插件knex & 日志打印的主要内容,如果未能解决你的问题,请参考以下文章

Knex NodeJS 并插入数据库

Knex这样的关系型db框架在NodeJS上真的可以使用异步IO吗?

Knex 以编程方式迁移最新版本

升级 Knex 后出现“获取连接超时”

CTK-使用ctk框架完成日志打印界面插件

AWS RDS / EC2:TimeoutError:Knex:获取连接超时。游泳池可能已满