1.ES6
(1)函数中的参数
ES6允许为形参设置为默认值,如果没有传递实参,则自动调用形参的默认值。
function add(num1,num2=7){}
(2)模版字符串
``用这个引起来如果需要放变量或者js语法在引号里面写
j
s
语
法
或
者
变
量
例
如
w
o
r
l
d
h
e
l
l
o
{js语法或者变量}例如 world hello
js语法或者变量例如worldhello{ 变量名或者js语法 };
2.错误处理
(1)常见的错误
SyntaxError 语法错误,错误的使用了中文符号,缺少括号…程序不会执行。
ReferenceError 应用错误,使用了未声明的变量,会影响后续代码的执行
TypeError 类型错误,错误的使用了数据的类型。例如把一个变量当函数使用,把对象当函数使用。会影响后续代码的执行。
RangeError 范围的错误,参数的使用超出了范围,会影响后续的代码的执行。 例如 new Array(3.5)
(2)错误处理
try{ 尝试执行可能出错误的代码 }catch(err){ 捕获出现的错误,并且把错误放在err中 错误的处理方案}
3.Node.js概述
NODEJS基于谷歌的V8(JS解释器),运行在服务端的语言基于Js。
http://nodejs.org 英文官网(官方)
http://nodejs.cn中文镜像官网(非官方)
对比JS和NODEJS
(1)JS运行在浏览器端,存在兼容性问题;NODEJS运行到服务端,不存在兼容性问题。
(2)两者都有内置(ES)对象、自定义对象、宿主对象(根据执行环境的不同)
(3)JS是用于网页上的交互效果,NODEJS是用于服务端的操作,例如:创建web服务器、操作数据库…
NODEJS的执行方式
脚本模式: node 文件路径
交互模式: node 回车 退出 两次ctrl+c或者输入 .exit 回车
NODEJS特点及应用
支持数万个并发连接
应用于社交网络的大规模web应用
4.全局对象
NODEJS:global
在交互模式下,声明的变量和创建的函数都是全局对象下的,可以使用global来访问,例如 var a=1;global.a
在脚本模式下声明的变量和创建的函数不是全局对象下的也不能使用global访问
JS:window
在浏览器上,文件中声明的变量和创建函数是全局对象下的,可以使用window来访问,例如 var a=1;window.a
(1)console对象
global.console.log() 打印日志
global.console.info() 打印消息
global.console.warn() 打印警告
global.console.error() 打印错误
global.console.time() 计时开始
global.console.timeEnd() 计时结束
自定义字符串前后要保持一致。
(2)process对象
当前计算机的进程。
process.arch 查看当前cpu的架构,x64
process.platform 查看当前的操作系统 win32
process.env 查看当前的环境变量有哪些
process.version 查看当前的nodejs的版本号
process.pid 查看到当前的进程编号
process.kill(编号)杀死某个编号的进程
(3)Buffer–缓冲区
在内存中存储数据的区域,存储网络传输时的资源。
创建Buffer
var buf = Buffer.alloc(5,‘abced’);
将buffer转为普通字符串
buf.toString();
5.模块系统
模块是一个预定义好的功能体,在nodejs下,每一个文件都是一个模块。
在NODEJS下分为自定义模块、核心模块(官方提供)、第三方模块
在NODEJS下,一个文件就是一个模块,文件中的代码默认是被一个构造函数所包含。
(function(exports,require,module,__filename,__dirname){})
__filename 当前文件的完整路径和文件名称
__dirname 当前文件的完整路径
require 是一个函数,用于应用模块;require(‘./07.js’)
238.00
module.exports.a=10;module.exports=add=add;
导出(公开)属性和函数。用于require调用模块中的数据。
module指的是当前的模块,module.exports 当前模块的导出对象。
exports等价于module.exports.
2.第三方模块
自动下载地址 http://www.npmjs.com
需要安装npm,随着nodejs一起安装。
切到需要下载的目录
(1)cd 完整的目录 回车
(2)在要下载的目录空白的区域,按住shift,单机右键->在此处打开 powershell(命令行)窗口
使用npm安装
npm install 包的名称
3.核心模块
是NODEJS官方提供的模块,可以直接引入,不需要创建。
(1)查询字符串模块——querystring
查询字符串:浏览器向服务器发送请求,传递数据的一种方式
协议,域名(IP),端口
http://codeboy.com:80/product_details.html?lid=5&name=dell (问号后面是一组查询字符串)
parse() 将查询字符串解析为对象
stringify() 将对象转为查询字符串,
(2)url模块
format()将一个对象转换成url格式。
parse()将url解析为对象
protocol 协议
hostname 主机(域名/ip地址)
port 端口
pathname 文件在服务器上的名字
query 查询字符串
4.全局函数
praseInt parseFloat encodeURL decodeURL isNAN
(1)一次性定时器
setTimeout
(2)循环定时器
setInterval 清除定时器 clearInterval
5.文件系统模块
用于操作服务器的文件(目录),例如:创建目录、删除目录、读取目录、创建文件、删除文件、写入文件…
引入文件模块:const fs=require(‘fs’);
(1)创建当前文件下的目录名为 mkdir:
fs.mkdir(’./mydir’,(err)=>{
用于查看目录是否创建成功
if(err){
//如果有错误就抛出
throw err;
}
console.log(‘目录创建成功’);
});
fs.mhdirSync(’./mydir’)不需要回调函数—同步
(2)移除目录
fs.rmdir(’./mydir’ ,()=>{ 判断移除目录是否成功 有错报错 })
fs.rmdirSync(’./mydir’)不需要回调函数—同步
(3)读取目录
异步函数:不会形成阻塞,等程序不忙了才会执行异步,非阻塞
通过回调函数获取结果。
fs.readdir(’./mydir’,(err,files)=>{})
同步函数:必须执行完毕才会执行后续的代码。通常也会形成阻塞
通过返回值获取结果
fs.readdirSync(’./mydir’);
(4)写入文件(创建在写入)
fs.writeFile(’./data.text’, ‘hello’(写入的数据) ,(err)=>{}) 如果有此文件 会清空内容 只写入此次 数据。
1.文件模块
(1)删除文件
fs.unlink(‘文件名’,(err)=>{回调函数});
(2)判断文件是否存在
fs.existsSync(‘文件名’)
(3)追加文写入数据
fs.appendFile(‘路径’,‘数据’,回调函数)
fs.appendFileSync(路径)
如果文件不存在会创建文件,如果文件已经存在,会在末尾追加写入数据。
(4)读取文件
fs.readFile(’./data.txt’,(err,data)=>{data 文件内容 })
读取出的数据格式是buffer数据 需要用 .toString来转换成字符串。
2.http协议
是浏览器和web服务器之间的通信协议,
(1)通用的头信息
Request URL:请求的URL,向服务端获取内容
Request Method:请求方法 get/post
Status code:响应的状态码
2**:服务器成功的响应
3**:响应的重定向,跳转到另一个URL
4**:客户端的错误
5**:服务器端的错误。
Remote Address:请求的服务器的IP地址和端口号
(2)响应的头信息
(3)请求的头信息
(4)请求的主题
可有可无,浏览器向服务端传递的数据。
3.http模块
可以模拟浏览器向服务器端发送请求;也可以创建web服务器
(1)模拟浏览器
res:响应的对象; req:请求; 的缩写
http.get(url,(res)=>{
res.statusCode 响应的状态码
res.on(‘data’,(buf)=>{ 获取的数据格式为buffer、
});
});
(2)创建web服务器
var server=http.createServer();
server.listen(3000) 监听3000端口的变化
server.on(‘request’,(req,res)=>{
req 请求的对象 url 请求的地址
method 请求的方法,一般都是get
res 响应的对象
响应跳转网站
res.writeHead(302,{Location:‘www.baidu.com’});
响应结束
res.end();
将响应的数据发送入浏览器中
res.write(‘hello world’);
})一旦有请求,自动执行
4.express框架
基于NODEJS的,用于构建web服务器的框架。
安装:npm install express (在要安装的目录的命令行中)
const express=require(‘express’);
创建web服务器
server=express();
监听端口
server.listen(3000);
(1)路由
浏览器向web服务器发送请求,web服务器会根据请求的URL和请求的方法做出响应。
必须满足路由的条件才会调用路由
满足 get请求方式 和 url 是/login
例如:server.get(’/login’,(req,res)=>{
res.send(‘页面浏览器显示内容’);
每个路由中只能使用一次send方法。
可以不写响应结束方法
})
1.路由
响应对象——res
res.send() 发送文本,只能响应一次;如果是数字会认为是状态码
res.sendFile() 发送文件到浏览器,必须使用绝对路径(__dirname)
res.redirect() 响应的重定向(跳转)
(2)请求对象(req)
req.method 请求的方法
req.url 获取去请求的url
req.headers 获取请求头的信息
req.query 获取请求时,以查询字符串传递数据,返回对象
req.params 获取路由传递数据,返回对象。
2.post和get请求
get请求是以查询字符串的形式传递数据,服务器使用req.query获取数据,结果是对象;
post请求是通过表单提交传递数据,服务器端通过事件形式来获取数据(后期会有简单方法)
req.on(‘data’,(buf)=>{获取查询字符串,需要用querystring解析为对象。})
3.使用路由来传递数据——路由传参。
设置路由中接受
server.get(’/detail/:lid’ ,(req,res)=>{ re
:lid 设置接受的名称
req.params 获取路由传递的数据–对象。
});
浏览器传递数据:http://www.baidu.com/detail/5
传递参数 5;
4.创建路由器并挂载
先创建一个文件写入路由器模块
const express=require(‘express’);
var router=express.Router();
router.get(’/list’ ,(req,res)=>{});
//将router对象共享出去
module.exports=router;
在另一个主文件导入这个路由器模块
const productRouter=require(’./product’);
将路由器挂载在服务器下
server.use(’/product’,productRouter);
可以通过 /product/list访问
5.中间件
(1)应用级中间件
每一个中间件就是调用一个函数,需要配合其他的中间件或者路由使用。
server.use(函数)拦截所有的路由
server.use(‘指定的url’,函数) 拦截特定的路由
想要执行下一步路由必须在函数里传一个 next 参数,并调用
next(); 才可以继续执行下一步。
(2)内置中间件(静态资源查找)
server.use(express.static(’./public’));
把静态资源文件托管到某一个目录下,如果浏览器请求静态资源则,在这个目录下自动查找。