node.js

304 阅读3分钟

环境准备

版本管理工具

npm install -g n

报错使用

npm install -g n --force

全局命令

__dirname 文件路径

console.log(__dirname)
// D:\web\知识体系\后端\传递参数

__filename 文件名

console.log(__filename)
// D:\web\知识体系\后端\传递参数\index.js

process对象

process提供了Node进程中相关的信息,如Node的运行环境,参数信息等

fs 文件系统模块

fs 模块用来操作文件的模块,它提供了一系列的方法和属性,用来满足用户对文件的操作需求

  • fs.readFile()方法,用来读取指定文件中的内容
  • fs.writeFile()方法,用来向指定的文件中写入内容

导入

const fs = require('fs')

读取指定文件中的内容 fs.readFile()

语法格式

fs.readFile(path[, options], callback) 参数解读

  • 1 必选参数,字符串,表示文件路径
  • 2 可选参数,表示以什么编码格式来读取文件
  • 3 必选参数,文件读取完成后,通过回调函数拿到读取的结果

示例

// 1 导入 fs 模块
const fs = require('fs')

// 2 调用 fs.readFile()方法读取文件
// 参数3:err为错误结果,dataStr为数据
fs.readFile('./1.txt', 'utf8', function(err, dataStr) {
  console.log(err)
  console.log('-----')
  console.log(dataStr)
  //  null
  //  -----
  //  111
})

写入文件内容 fs.writeFile()

image.png

示例

如果写入成功err为null,并且新增2.txt文件

const fs = require('fs')
fs.writeFile('./txt/2.txt', 'abcd', function(err) {
  if (err) {
    return console.log('文件写入失败!' + err.message)
  }
  console.log('文件写入成功!') // 文件写入成功!
})

路径动态拼接问题

image.png

const fs = require('fs')
// __dirname 表示当前文件所处目录
console.log(__dirname)

fs.readFile(__dirname + '/txt/1.txt', 'utf8', function (err, dataStr) {
  if (err) {
    return console.log('读取文件失败!' + err.message)
  }
  console.log('读取文件成功!' + dataStr)
})

path 路径模块

image.png

路径拼接 path.join()

使用path.join()方法,可以把多个路径片段拼接为完整的路径字符串, 示例

const path = require('path')
const fs = require('fs')
// 注意 ../ 会抵消前面的路径

const pathStr = path.join('/a', '/b/c', '../', './d', 'e')
console.log(pathStr) // \a\b\d\e

fs.readFile(path.join(__dirname, '/txt/1.txt'), 'utf8', function(err, dataStr) {
  if (err) {
    return console.log(err.message)
  }
  console.log(dataStr) // 111
})

获取路径中的文件名 path.basename()

使用path.basename()方法,可以从一个文件路径中,获取到文件的名称部分

const path = require('path')

const fpath = '/a/b/c/index.html'

const fullName = path.basename(fpath)
console.log(fullName) // index.html

const nameWithoutExt = path.basename(fpath, '.html')
console.log(nameWithoutExt) // index

获取路径中的扩展名

image.png

http模块

http模块是Node.js官方提供的、用来创建web服务器的模块。通过http模块提供的http.createServer()方法,就能方便的把一台普通的电脑, 变成一台Web服务器,从而对外提供Web资源服务。

导入

const http = require('http')

创建web服务器

// 1. 导入http模块
const http = require('http')
// 2. 创建web服务器实例
const server = http.createServer()
// 3. 为服务器实例绑定 request 事件,监听客户端的请求
server.on('request', function(req, res) {
  console.log('Someone visit our web server')
})

server.listen(8080, function () {
  console.log('server running at http://127.0.0.1:8080')
})

post请求

参考

WebSocket

// 后端
// 导入websocket
const WebSocket = require('ws')
// WebSocket
const wss = new WebSocket.Server({ port: 3939 })
wss.on('connection', function connection(ws) {
    console.log('server: receive connection.')
    ws.on('message', function incoming(message) {
        console.log('server: received: %s', message)
    })
    global.ws = ws
})

// 前端
const that = this
// 建立WebSocket通信
const ws = new WebSocket('ws://localhost:3939')
ws.onopen = function() {
  console.log('建立WebSocket通信')
  // ws.send('from client: hello')
}
ws.onmessage = function(e) {
  that.onlineNum = JSON.parse(e.data).online
}

MySQL

MySQL时间查询

1,查询当天(今天)的数据

SELECT * FROM order WHERE TO_DAYS(order_time) = TO_DAYS(NOW())

2,查询昨天的数据

SELECT * FROM order WHERE TO_DAYS(NOW()) - TO_DAYS(order_time) = 1

这里需要注意网上很多都是<=1是不对的,TO_DAYS函数 返回一个天数,从年份0开始的天数

比如:SELECT TO_DAYS(‘1997-10-07′);

结果 729669
表示从0年开始 到1997年10月7号之间的天数,所以应该是=1,如果是<=1会把昨天的和今天的也查出来。

DATE_FORMAT(时间格式化)

对应规则,通过这个就可以查询某一天对应的数据,time是时间对应字段

select * from report_use where DATE_FORMAT(time,'%Y-%m-%d')='${info.time}'

3. 查询一天中每小时的数据

参考
HOUR: 返回时间的小时部分。返回值的范围为0至23的小时值。参考

select a.order_hour as order_hour, ifnull(b.num, 0) as num 

from (
 SELECT 0 AS order_hour UNION ALL SELECT 1 AS order_hour UNION ALL
 SELECT 2 AS order_hour UNION ALL SELECT 3 AS order_hour UNION ALL 
 SELECT 4 AS order_hour UNION ALL SELECT 5 AS order_hour UNION ALL 
 SELECT 6 AS order_hour UNION ALL SELECT 7 AS order_hour UNION ALL 
 SELECT 8 AS order_hour UNION ALL SELECT 9 AS order_hour UNION ALL 
 SELECT 10 AS order_hour UNION ALL SELECT 11 AS order_hour UNION ALL 
 SELECT 12 AS order_hour UNION ALL SELECT 13 AS order_hour UNION ALL 
 SELECT 14 AS order_hour UNION ALL SELECT 15 AS order_hour UNION ALL 
 SELECT 16 AS order_hour UNION ALL SELECT 17 AS order_hour UNION ALL 
 SELECT 18 AS order_hour UNION ALL SELECT 19 AS order_hour UNION ALL 
 SELECT 20 AS order_hour UNION ALL SELECT 21 AS order_hour UNION ALL 
 SELECT 22 AS order_hour UNION ALL SELECT 23 AS order_hour 
) as a

LEFT JOIN 

(
	SELECT HOUR(create_time) AS order_hour, count(id) AS num FROM mod_work_order 
  WHERE create_time >= str_to_date('2021-03-22 00:00:00','%Y-%m-%d %T')    
  AND create_time <= str_to_date('2021-03-22 23:59:59','%Y-%m-%d %T')   
  GROUP BY order_hour
) b ON a.order_hour=b.order_hour

ORDER BY order_hour;

mysql分页

// 分页分两次查询,一次是查询总数据,一次是查询分页的数据
// 1 总数据除以每页数得出总页数省略
// 2 limit(第几页的数据 - 1)*每页多少条,每页多少条
select * from report_use where id=${userInfo[0].id} limit ${(currentPage-1)*10}, 10