前言
node环境安装
之前我们安装的node是通过对应的node的安装包进行安装的(版本是死的 某些时候版本不兼容)。
nvm(node版本管理器)。我们可以直接安装nvm,然后通过nvm来安装node(随意进行版本切换)
一、nvm环境安装?
1.下载nvm安装包
2.安装nvm
nvm -version
3.更改镜像(加到你的nvm的安装路径下的settings文件中)
nvm node_mirror https://npm.taobao.org/mirrors/node/
nvm npm_mirror https://npm.taobao.org/mirrors/npm/
4.通过nvm来安装node(管理员方式运行)
nvm ls #查看所有的node版本
nvm install 版本 #安装node版本
nvm use 版本 #版本切换
二、http 服务器交互
fs 文件系统
querystring 解析对应的url请求的数据
url 对应的url地址的读取
events模块(事件)
events使用到的是观察者模式 (on off emit)
events里面的主要对象是EventEmiter对象
使用
代码如下(示例):
const EventEmitter = require('events').EventEmitter
let eventEmit = new EventEmitter()
//on监听
let fn = function(agr1){
console.log("hello"+agr1);
}
eventEmit.on('listen1',fn)
eventEmit.on('listen1',function(agr1){
console.log("你吃饭了"+agr1);
})
//off取消监听 里面的function不是回调 是取消的事件执行函数 eventEmit.off('listen1',fn) //emit执行 eventEmit.emit('listen1','张三') //一个监听事件 可以对应多个方法 一个内容可以对应多个监听(监听数组)
http模块 我们只能通过url获取get请求提交的数据(如果需要需要post请求的数据 我们需要监听)
const http = require('http')
const url = require('url')
const {parse} = require('querystring')
const {readFile,writeFile} = require("fs")
//创建了一个服务
let server = http.createServer() //表示当前是一个服务
//监听对应的请求方法 request (只是请求进来了)
server.on('request',function(req,res){
res.setHeader('Content-type','application/json;charset=utf-8')
res.setHeader('Access-Control-Allow-Origin','*')
let router = url.parse(req.url).pathname //路由地址
if(router == "/login"){
//用于拼接数据
let data = ""
// 监听错误
req.on('error',function(){
console.log("请求错误");
})
//得到请求的数据
// 监听的请求里面的数据的变化 监听post请求
req.on('data',function(chunk){
// chunk 过来的数据 分段
data+=chunk.toString()
})
//监听请求结束
req.on('end',async function(){
let param = parse(data) //接收post请求的数据
//2.读取这个json文件的数据
await new Promise((success,error)=>{
readFile('./db.json',(err,data)=>{
if(err) error(err)
success(JSON.parse(data.toString()))
})
}).then(data=>{
// console.log(data.users); //res.users
//3.在对应读取的数据里面进行查找
let obj = data.users.filter(v=>{
return (v.username == param.username)&&(v.password == param.password) })
//4.有相同的内容就返回登录成功 没有就返回失败
if(obj.length>0) res.write(JSON.stringify({messgae:'登录成 功',data:obj[0]}))
else res.write(JSON.stringify({messgae:'登录失败',data:{}})) })
res.end()
})
}
})//监听这个服务 events里面的事件循环(一直在监听)
server.listen('12345',function(){ console.log('当前服务已经开启'); })
执行顺序 先宏后微
方法是存在于方法栈 (栈 入栈 ) 栈里面的队列(event) 队列
Mysql模块
关系型数据库(存储在硬盘上 mysql)
非关系型数据库(key-value数据库 存在内存上 mongodb)
mysql入门
1.下载安装
npm install mysql -S #下载安装
-S --save 保存测试环境
cnpm i mysql -S #使用cnpm下载
yarn add mysql -S #使用yarn下载
2.导入
const mysql = require('mysql'
3.使用 (mysql里面的方法是异步的
//1.导入
const mysql = require('mysql')
//2.使用
//2.1 建立连接(新建一个连接对象) 同步代码块
const conn = mysql.createConnection({
host:"localhost",
port:"3307",
user:"root",
password:"root",
database:"db_user",
charset:"UTF8_GENERAL_CI"
})
//2.2 通过连接对象建立连接
conn.connect(function(){
console.log("连接成功");
})
//2.3 通过连接对象执行sql语句 查询语句返回的是一个数组
conn.query("select * from t_user",(err,data)=>{
if(err) throw new Error('查询错误')
console.log(data[0]);
//查询的内容返回值为一个数组 })
//2.4 关闭连接
conn.end()
crud
//1.导入
const mysql = require('mysql')
//2.使用
//2.1 建立连接(新建一个连接对象) 同步代码块
const conn = mysql.createConnection({
host:"localhost",
port:"3307", user:"root",
password:"root",
database:"db_user",
charset:"UTF8_GENERAL_CI" })
//2.2 通过连接对象建立连接
conn.connect(function(){
console.log("连接成功"); })
//2.3 通过连接对象执行sql语句 查询语句返回的是一个数组
conn.query("select * from t_user",(err,data)=>{
if(err) throw new Error('查询错误')
console.log(data);
//查询的内容返回值为一个数组 })
//根据id查询
conn.query("select * from t_user where id=?",1,(err,data)=>{
if(err) throw new Error('查询错误')
console.log(data[0]);
//查询的内容返回值为一个数组 })
// 添加 增删改返回的是一个对象
conn.query("insert into t_user(username,password) values(?,?)", ['zhangsan','abc'],(err,data)=>{
if(err) throw new Error('插入错误')
console.log(data[0]);
//插入的内容返回的是一个对象 })
// 删除 conn.query("delete from t_user where id=?",9,(err,data)=>{
if(err) throw new Error('删除错误')
console.log(data); })
// 修改
conn.query("update t_user set username=?,password=? where id = ?",['王二 狗','abc',8],(err,data)=>{
if(err) throw new Error('修改错误')
console.log(data);
})
//2.4 关闭连接
conn.end()