nodejs学习

  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

    bookshelf.js Bookshelf是在 SQL查询构建器上构建的Node.jsJavaScript ORM。 它具有基于Promise的和传统的回调接口,事务支持,渴望/嵌套渴望的关系加载,多态关联以及对一对一,一对多和多对多关系的支持。 它设计用于PostgreSQL,MySQL和SQLite3。 。 该项目,并具有全面的。 Bookshelf的目的是提供一个简单的库,用于在JavaScript中查询数据库并形成这些对象之间的关系时的常见任务,并从吸取了很多想法。 凭借简洁明了的代码库,Bookshelf易于阅读,理解和扩展。 它不会强迫您使用任何特定的验证方案,而是提供灵活,高效的关系/嵌套关系加载和一流的交易支持。 这是一个精简的对象关系映射器,允许您在需要与股票惯例不太吻合的自定义查询时,放到原始的Knex接口。 您需要从npm安装和mysql , pg或sqlite3的副本。 $ npm install knex $ npm install bookshelf # Then add one of the following: $ npm in 功能:根据不同级别的错误信息例如:debug、info、error,将其输出到控制台或是存储到日志文件中。 对log4js进行追加器和追加器种类的配置,通过函数的形式将其导出并调用 * @description: 日志存储 const log4js = require('log4js') // log4js 常量 const levels = { 'trace': log4js.levels.TRACE, 'debug': log4js.levels.D Node.js中的流利日志记录器:fluent-logger 项目地址:https://gitcode.com/fluent/fluent-logger-node 1、项目介绍 fluent-logger 是一个专门为Node.js设计的轻量级库,它为应用程序提供了与Fluentd数据收集器进行通信的能力。灵感来自于Python版本的fluent-logger,这个库允许开发者以简单的方式发送事件... knex.js是bookshelf框架的基础,其核心是query builder。这篇文章参考自Knex.js官网,翻译并总结了该框架的方法。0 安装#以PostgreSql为例sudo npm install knex --savesudo npm install pg --save012#以PostgreSql为例sudonpminstallknex--savesudonpminstallpg... table.increments('id') //id自增table.integer('age') //age 整数table.string('name') //name 字符串table.string('hobby') //hobby 字符串table.timestamps(true,true) //创建时间和更新时间console.log('创建成功')}) 当你开始使用JavaScript开发时,可能要学习的第一个技能就是如何使用console.log将内容打印到控制台。如果你搜索如何调试JavaScript,将会发现数百篇博客和StackOverflow文章指向console.log。因为这是一种很常见的方法,我们甚至开始使用像no-console这样的linter规则来确保我们不会在生产代码中留下意外的日志语句。但是如果我们真的想通过打印一些东... 尽管在Node.js社区中,Prisma是许多人首选的ORM,但在撰写本文时,Prisma并不包含Sequelize中的许多内置钩子。每个应用程序都有不同的要求和面临新的挑战。在node-postgres中,我们没有可用的生命周期钩子,所以像Prisma一样,我们必须手动进行密码哈希处理:​​​​​​​。在本文中,我将解释如何在您的Node.js应用程序中使用数据库钩子来解决在开发过程中可能出现的特定问题。在本文中,我将介绍这些客户端提供的一些钩子,并说明您如何在分布式SQL应用程序中使用它们的好处。 定义了两个传输器,一个将日志消息记录到控制台,另一个将错误日志消息记录到名为 error.log 的文件中。我们也可以自定义格式化器,根据自己的需求来记录日志数据。这样的日志不仅很难知道消息级别或消息记录的日期,而且过滤和排查日志也是一项艰巨的任务。Winston 支持多个日志级别,可以根据日志消息的严重程度选择不同的日志级别来记录。● 可以很容易地取消全部日志记录,或者仅仅取消某个级别以下的日志,而且可以很容易地再次打开日志开关。● 可以很简单的禁止日志记录,因此,将这些日志代码留在程序中的开销很小。