Node+Vue

一、Nodejs介绍

不是脚本语言,也不是框架,是基于chrome(谷歌) V8 引擎的一个JavaScript运行平台
NodeJS使用了事件驱动和非阻塞式I/O模式
NodeJS使用了ECMAScript6标准,不能操作DOM和BOM

二、NPM介绍

NPM(Node Package Manager)Node包的管理工具
允许用户从NPM服务器下载第三方的JS库到本地
安装:NPM与Node进行了绑定,安装完Node自动就安装了NPM

三、前期准备

1.下载安装Node

2.配置Node的环境

在这里插入图片描述
在这里插入图片描述

3.可以通过NPM初始化项目

可以手动配置
D:\IDEA\代码\Node>npm init
也可以自动配置(采用默认参数)
D:\IDEA\代码\Node>npm init -y

4.模块安装

1.本地安装(在当前项目下安装JS库)

将js库安装到当前执行到安装命令的文件夹下
npm install jquery
npm install bootstrap@3.3.7

2.全局安装

npm install -g [@版本号]

3.生成环境安装

项目中用到的JS库,在打包上转后需要用到;使用本地安装
npm install --save
cnpm install vue --save

4.开发环境安装

npm install --save -dev
cnpm install eslint --save-dev

5、CNPM和NPM

使用国内的npm镜像(淘宝)每10分钟与主站同步
使用时要将cnpm进行配置
npm install -g cnpm -registry=http://registry.npm.taobao.org
配置好这些可以在cmd里面用命令执行JS文件:node (文件名):node firstNode.js

四、开发工具

Idea\webstrom\vscode

五、commonjs模块规范

1.为什么使用commonjs模块规范
JavaScript不能进行大型应用的开发,没有模块系统、资源库少、没有标准的接口等;commonjs提供弥补了javaScript没有标准的缺陷。
2.Commonjs模块规范
每一个文件就是一个模块,有自己的作用域。一个文件中可以定义变量、函数、类型。对外是不可见的。
2.1定义一个模块
创建独立的js文件,并且要对外发布一个接口
每个模块都有一个module变量,变量代表当前模块;通过模块的exports属性向外提供接口
2.2引用模块
在js文件中使用require()方法引用指定的模块
语法:
require(模块的路径)
模块路径:如果在同一个目录下使用’./'开头的相对路径
2.3模块标识
就是require()方法的参数

六、Node中的模块

1、系统(核心)模块

不用安装,可以直接使用

Buffer模块

固定长度(0-255)的,处理二进制数据的字符模块,整型数组,显示的数据
是十六进制
创建Buffer模块对象

  1. Buffer.alloc(size[,fill,[,encoding]])
    size:buffer 对象长度
    fill:初始化内容(会使用填充内容将buffer所有的空间进行填充)
    encoding:编码格式,默认utf-8
    在这里插入图片描述

  2. Buffer.allocUnsafe(size)
    size:buffer 对象的长度
    注:此方法创建的buffer对象没有初始化,但是buffer对象中的内
    容是随机的;此方法创建的速度快
    let buf=Buffer.allocUnsafe(10);
    console.log(buf);
    在这里插入图片描述

  3. Buffer.from(array)
    array:可以是整型数组,也可以是字符串,buffer的长度有array
    决定
    常用的方法
    a)、Buffer.byteLength(string) -> 获取字符串的字节数
    b)、Buffer.isBuffer(object) ->判断对象是否是Buffer对象
    c)、Buffer.concat(list[,totallLength]) ->连接指定的Buffer对象
    在这里插入图片描述
    在这里插入图片描述

  4. buf.write(string[,offset[,length[,encoding]]])
    将字符串写入Buffer对象,返回写入的字节数,主要用于
    给allocUnsafe方法创建的Buffer对象初始化
    String:要写入的内容
    Offset:开始写入的位置,默认从下标为0的位置开始
    Length:写入的长度
    在这里插入图片描述

  5. buf.fill(value[,offset[,end[,encoding]]])
    使用value填充buffer对象,返回的是buffer对象,会将整个Buffer
    填满
    在这里插入图片描述

  6. buf.toJSON()
    将buffer转换为JSON数据返回:json中只有两个键type和
    data);type对应的值是Buffer;data对应的是Buffer对象中的数据数组

在这里插入图片描述
7. buf.equals(Buffer) 比较两个Buffer对象是否全等(长度和内容)
在这里插入图片描述
8. buf.indexOf/lastIndexOf(string) 在buffer中查找指定字符返回字符第一
次(最后一次)出现的下标;不存在返回-1
在这里插入图片描述
9. buf.slice(start[,end]) 截取buffer;start:开始的位置;end:结束的位置
(不包含):返回的是buffer对象
在这里插入图片描述

文件系统模块 ->fs

该模块中提供了读写文件的fs
使用时前提:要使用require()方法引入此模块

  1. 读文件
    fs.readFile(path,callback)
    - path:要读取的文件的路径
    - callback:回调函数,有两个参数,第一个参数标识异常对象,第二个参数表示读取的数据
    在这里插入图片描述

  2. 写文件
    fs.writeFile(path,data[,encoding],callback)
    - path:要写数据的文件的路径
    - data:写入的数据
    - encoding:编码格式,默认utf8
    - callback:回调函数,只有一个表示异常对象的参数
    注:如果文件不存在,创建文件;如果文件存在,则覆盖原文件
    在这里插入图片描述

  3. 追加文件
    fs.appendFile(path,data[,encoding],callbback)
    - path:要追加数据的文件路径
    - data:要追加的数据
    - encoding:编码格式,默认utf8
    - callback:回调函数,只有一个表示异常对象的参数
    注:如果文件不存在,则创建文件写入数据在这里插入图片描述

  4. 获取文件信息
    fs.stat(path,callback) 主要用于判断文件是否存在
    - path:文件的路径
    - callback:回调函数,有两个参数,第一个表示异常对象,第二个文件的信息对象
    注:使用文件信息对象的isFile()方法和isDirectory()方法判断是否是文件或文件夹,通过异常对象判断文件或文件夹是否存在。
    在这里插入图片描述

  5. 重命名文件
    fs.rename(oldPathName,newPathName,callback)
    - oldPathName:原文件名
    - newPathName:新文件名
    - callback:回调函数,有一个表示异常对象的参数
    在这里插入图片描述

  6. 删除文件
    fs.unlink(path,callback)
    - path:删除的文件路径
    - callback::回调函数,有一个表示异常对象的参数
    - 注:如果文件不存在则报错。在这里插入图片描述

  7. 创建目录
    fs.mkdir(path[,recursive],callbacck)
    - path:新文件夹的路径
    - recursive:默认 false
    - callback:回调函数,有一个表示异常对象的参数
    - 注:不加recursive属性只能创建一级目录在这里插入图片描述
    在这里插入图片描述

  8. 删除目录
    fs.rmdir(path[,recursive],callback)

    • path:要删除的目录路径
    • recursive:默认false,只能删除空目录;如果为true可以删除非空目录。在这里插入图片描述
      在这里插入图片描述
  9. 文件流
    流在Node中处理流式数据的接口,stream模块用于构建流接口的对象,可以通过HighWaterMark设置每次传入数据的大小。

// //读取数据
// const fs=require('fs');
// //创建读取流
// let read = fs.createReadStream('abc.txt');
// //设置读取的编码格式
// read.setEncoding('utf8');
// //监听 -> on()方法绑定事件(添加监听)read.on('')表示监听谁
// //data ->事件(监听)的名称
// //chunk -> 读取的数据

// let data ='';//保存读取的数据

// read.on('data',function(chunk){
//     data+=chunk;
//     console.log(chunk);
// })
// read.on('end',function(){
//     console.log(data);
// })
// read.on('error',err=>{
//     console.log('读取文件错误');
// })

// //输出流
// const fs=require('fs');
// //创建输出流
// let write=fs.createWriteStream('bbb.txt');
// //输出数据
// write.write('正在写的是输出流','utf8');
// //结束输出
// write.end();
// //监听事件
// write.on('finish',()=>{
//     console.log('写入完成');
// })
// write.on('error',err=>{
//     console.log(err);
// })


//管道流
const fs=require('fs');
//创建输入流
let read=fs.createReadStream('abc.txt');
//创建输出流
let write=fs.createWriteStream('abcd.txt');
//把输入流和输出流绑定
read.pipe(write);
console.log('复制完成');

http模块(https模块)

此模块主要用于搭建服务端和客户端
要搭建服务端和客户端就必须用到此模块
创建服务器
在这里插入图片描述
扒取网页
在这里插入图片描述

path模块

此模块主要用于文件和目录的路径
path.basename(filePath);获取路径中最后一级目录
path.dirname(filePath);获取路径中的目录
path.extname(filePath);获取路径中的后缀
path.parse(path);获取路径对象
在这里插入图片描述

在这里插入图片描述
格式化路径:

在这里插入图片描述
path.join([…paths]) 拼接给定的路径片段
在这里插入图片描述
__filename 获取当前文件的绝对路径
__dirname 获取当前目录的绝对路径
在这里插入图片描述

事件触发器(events)

Node是基于事件驱动的,通过events可以方便的创建事件,通过事件的回调函数定义监听函数。
能触发事件的对象都是EventeMitter实现类。当自定义一个类时必须继承EventeMitter。

1.创建触发器
on(eventName,function)
- eventName ->触发器名称
- function ->回调函数(事件操作)
2. 触发事件
emit(eventName[…params])
- eventName ->事件的名称
- params ->事件的参数
在这里插入图片描述
3. 只触发一次事件
once(eventName,function)

  • eventName ->事件的名称‘
  • function ->回调函数

在这里插入图片描述
4. 删除指定的事件
removeListener(eventName,function)
- eventName ->事件的名称‘
- function ->回调函数
5. 删除所有的事件
removeAllListeners([eventName])
- eventName ->事件的名称,如果没有参数表示移除所有
6. 设置同名事件的最大数
Emitter.setMaxListeners(n)
- n:事件的个数,默认为10个,超过了设定的个数会给出提示信息有可能内存溢出;n=0:表示不限制事件的数量

路由

就是URL与请求处理方法的映射
在Node中使用路由处理get/post请求,从URL中提取相应的信息(特别是提交的参数信息),需要去解析URL
http://localhost:3000/page/index.jsp?name=admin&pwd=123
要解析url通过URL模块中的pars()方法
url.parse(reqUrl,parseString);
url ->要解析的url地址
parseString ->是否将query项解析为字符,默false;当为true时将query解析为JSON数据(键值对)
在这里插入图片描述

处理get请求 ->获取请求中的参数
将提交的url进行解析,获取解析后url对象中的query项
在这里插入图片描述

处理post请求 ->获取请求中的参数
post请求提交的数据是按照流的形式提交的
pist请求如果使用url.parse()方法解析不能获取提交的参数(query是没有内容的)
借助querystring模块进行获取提交的参数
querystring.parse(str[,separator[,eq[,options]]])将字符串解析为query对象
str ->要解析的字符串
separator ->键值对的分隔符,默认&
eq ->键和值的分隔符,默认 = z
options ->参数设置
maxKeys ->最大的键值对数,默认值1000,如果设为0,表示忽略限制。
在这里插入图片描述
getPost请求通用
在这里插入图片描述

项目改动自动重启工具(nodemon)

安装 npm install nodemon -g
启动服务的命令:nodemon

Node 连接数据库

使用mysql模块,此模块提供了连接数据库的方法和连接池
前提:按照mysql模块
安装命令:npm install mysql --save

  • 创建连接:
    createConntion
    host:‘localhost’,
    port:3306,//端口号
    user:root,//账号
    password:123,//密码
    database:‘smbms’//数据库
    charset:utf-8 //字符编码

  • 获取连接:
    conn.connect(callback)

  • 关闭连接
    conn.end(callback) //会关闭一个连接,在执行时会调用回调函数
    conn.destroy()//销毁一个连接,没有回调函数
    在这里插入图片描述

  • 数据库的操作(增删改查)
    conn.query(sqlStr[,params],callback)
    sqlStr:要执行的sql语句,可以使用占位符
    params:参数列表,数组
    callback:回调函数,第一个参数:异常对象;第二个参数:结果对象
    连接数据库之后操作数据:
    在这里插入图片描述
    在这里插入图片描述

  • 查询:结果对象是查询的对象数组,每个对象就是一条记录
    插入:结果对象包含两个属性:affectedRows ->受影响的行数;insertId ->插入数据的id列值

  • 修改和删除:结果对象只包含一个属性:affectedRows ->受影响的行数
    连接池:
    管理数据库连接。
    在这里插入图片描述

2.自定义模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值