node
一 在node中,传递值的时候,第一个值一定是err,后面的才判断是否是数据data
二 接收参数,使用node中自带的事件接收参数:node中,允许传递大容量的数据,它是分批进行参数的接收
在分批接收参数的时候,会频繁的触发data事件,在这个事件中每次接收指定大小的数据
var str = ’ ';
//chunk:每次接收到的字符串数据
req.on(‘data’,(chunk)=>{
str = str + chunk
})
//当参数全部接收完毕,会触发end事件
req.on(‘end’,()=>{
console.log(stt)
})
三 核心模块queryString 把url上面的序列化字符串,转换成对象的模式
var queryString = require("queryString ")
var newObj = queryString.parse(str)
四 获取url上的id的值
location.search(url)获取url上?以及?后面的参数
核心模块,专门处理URL
var myurl = require(‘url’);
myurl.parse(req.url,true)
五 arr.forEach((value,index)=>{})
forEach遍历的时候,value值是原始数组数据的副本,理论上说,修改value数据不会影响数组的元素数据,但是,由于数组中存储的数据是对象,所以默认情况下value和数组中原始数据指向同一个地址空间,所以使用 . 语法也可以进行数据的修改,但是使用对象重置不能修改原始数据
六 node中的重定向
302 301 状态码,可以重定向
res.writeHead(302,{
'Location':'/'
})
express模块
下载 npm install express --save
一 创建服务器
var express = require("express")
var app = express()
app.listen(3001,()=>{})
路由配置
app.get('/',(req,res)=>{
res.end('hell world')
})
关于路由模块
//创建路由模块
var express = require("express")
//在这个模块上可以挂载多个路由配置
var router = express.Router();
//挂载路由配置
router.get('/',(req,res)=>{
res.end('hell world')
})
使用路由模块—注入路由
注入之后,当有用户请求的时候,就会调用router模块进行处理
app.use(router)
二 express 加载静态资源
托管静态资源
方法一:app.use(express.static('自己指定的文件夹'))
app.use(express.static('public'))
方法二:要为函数提供的文件创建虚拟路径前缀(文件系统中不存在路径),请为静态目录知道安装路径
app.use('/images/,express.static('images'))
数据库
data.json缺点
1 数据存取不方便,不利于维护和扩展,当数据量大了之后,无法直接通过打开文件的形式对数据进行操作
2 数据存储比较分赛,无法进行集中式管理
3 安全性较低,由于数据是直接存储在文本文件中,所有无法进行数据的加密,存在安全隐患
mysql
增加
INSERT INTO 表名(字段列表) VALUES(值列表)
表名后面也可以不指定字段名称,如果没有指定,则需要对表中的所有字段添加数据
值列表需要和字段列表有三个对应
数量对应 顺序对应 类型对应
在添加的时候,日期值一定要给单引号
删除
一定要考虑是否有条件
delete from 表名 where 条件(not and or)
修改
update 表名 set 字段 = 新值 ,字段=新值 。。。。where 条件
查询
select from where roder by
inner join left join right join
使用mysql
一 代码选择数据库
use 表名
npm i mysql
引入mysql模块
var mysql = require('mysql')
二 创建数据为时链接
createConnection方法可以创建数据库链接,这个方法需要传二 入链接配置参数,它是一个对象
var connection = mysql.createConnection({
host:'locahost',
user:'root',
password:'root',
database:'mybase'
})
三 打开链接
connection.connect()
四 执行mysql命令
var sql = 'insert into heros value(null,‘rose’,‘女’,‘4.jgp’,‘defalt’)
第一个参数:你需要执行的sql命令
第二个参数是一个回调,回调有三个参数
err:错误信息
result:操作结构,查询的操作结果是结果集,增删改的操作结果是受影响行数
fields:如果是增删改,那么返回undefined,如果是查询则返回当前查询出的字段的相关信息
connection.query(sql,(err,resule,fields)=>{
if(err){
console.log(err)
}else{
console.log(result)
console.log(fields)
}
})
五 关于占位符配合mysql的使用
ES6中的模板字符串 `` esc下面那个键,它能实现文本换行,同时还能实现解析包含早反引号中的变量
var sql = insert into heros values(null ,’{obj.img}’,’${obj.gender}’,default)
插入
sql 中的?是占位符
var sql = insert into heros values(null,?,?,?,default)
占位符使用,那么第二个参数是占位对应的数据,它是一个数组,数组中的数据与占位符一一对应(顺序和数量及类型)
connection.query(sql,[obj.name,obj.gender,obj.img],(err,resule,fields)=>{
if(err){
console.log(err)
}else{
console.log(result)
console.log(fields)
}
})
更新
var sql = `update heros set ?where id=?`
connection.query(sql,[ob,obj.id],(err,resule,fields)=>{
if(err){
console.log(err)
}else{
console.log(result)
console.log(fields)
}
})
新增
var sql = insert into heros (name,)
express里面的模板
一 渲染模板
render()可以实现渲染操作:结合模板和数据,生成动态结构,同时它还会降渲染的结构返回
这个方法的执行,需要你自己来指定使用哪种模板引擎如果你没有设置,那么它就不知道如何处理
所以,使用这个方法需要预选告诉app你想使用的模板引擎
res.render(__diename+'/views/index.html',data)
二 指定模板引擎,在中间件的方法中使用
加载指定模板引擎,通过中间件的方式来指定
engine用来指定你想使用的模板引擎:express-art-template
app.engine('art',require('express-art-template'))
art指的是模板的扩展名
设置这个模板引擎所使用的环境变量,下面这个设置说明这个模板引擎在产品阶段都需要使用
app.set('view options',{
debug:process.env.NODE_ENV !== ‘production’
})
在express中使用EJS
模板的输出是<%%> <%= %> <%- %>
一 创建服务器
二渲染
app.get('/',(req,res)=>{
res.render(__dirname+"/views/text.html",{name:'jack',age:'20'})
})
通过中间件去指定渲染时的模板引擎
var ejs = require(‘ejs’)
app.set(‘view engins’,‘ejs’)//模板引擎为ejs
配置,当扩展名为html的时候调用ejs进行渲染
app.engine(’.html’,require(‘ejs’).readerFile)
关于正则
学习正则就是学习它的元字符
占位符:\w \W \s \S \d \D [] .
修饰符: *:修饰前面的字符出现任意次
?:修饰前面的字符出现0次或1次
+:修饰前面的字符出现1次或者多次
{n}:修饰前面字符出现n次
{n,m}:修饰前面字符最少出现n次,最多出现M次
{n,}:修饰前面字符最少出现n次,最多无限制
其他:^ $ 以什么开头,以什么结尾 ()
在node中
一 返回结果给首页
res.json()
可以将对象转换成json格式的字符传并返回
二 获取post传递过来的数据 body-parser
安装
npm i body-parser
//引入
var bodyParser = require('body-parser')
var A = bodyParser.json()
var B = bodyParser .urlencoded({extended:false})
app.use(A)
app.use(B)
获取到的数据在 req.body 里面
Express — session
重定向:
res.redirect('/')
关于php中的session_start()的问题
在php的时候,如果想使用Session,就必须先添加一句代码:session_start()
原因:是因为这句代码一共干了下面几个事件
1.随机的生成一个session_id
2.根据这个id号在指定的位置动态的创建一个文件,文件名以sess_id命名
3.以Set-cookie的方式返回这个id
告诉我们一个道理:就是服务器并不会默认的开启session处理,如果你想使用session,你得告诉服务器,session_start
一 实现状态保持,可以使用express-session
1 下载
npm i express-session
2 引入
var session = require('express-session')
3 使用
取值和赋值都是使用req.session,它是一个对象
req.session.isLogin = 'true'
4 配置
app.use(session({
secret:"aaa",//俗称加盐。二次加密
resave:"false",//每次请求的时候重新存储session数据
saveUninitialized"false//无论你是否使用session,都默认给你分配一把钥匙
}))
express—导航守卫
导航守卫:在进行路径跳转的时候,进行判断如果满足要求则跳转,否则则不跳转
app.use((req,res,next)=>{
console.log('经过了这个中间件')
next()//如果没有next调用,那么请求到此为止
})
在node中设置cookie值
通过响应头写入
设置有效时间
var ex = new Date(Date.now() + 10*1000).toUTCString()//把正常的东八区的时间变为GMT时间
fs.writeHead({
‘Set-Cookie’:'isLogin=true'//单个值的写法
‘Set-Cookie’:['isLogin=true;expires='+ex,'isLogin=true']//多值写法
//多值写法应对设置每个值的有效期时间,有效期必须基于当前时间基础之上进行设置
})
在node-express中的跨域
客户端:jsonp
服务端: CORS
设置允许跨域
//设置跨域访问
app.all(’’, function(req, res, next) {
-
res.header(“Access-Control-Allow-Origin”, “*”);
res.header(“Access-Control-Allow-Headers”, “X-Requested-With”);
res.header(“Access-Control-Allow-Methods”,“PUT,POST,GET,DELETE,OPTIONS”);res.header("X-Powered-By",' 3.2.1') res.header("Content-Type", "application/json;charset=utf-8"); next();
});
关于ES6的新语法
一 反引号
1 可以创建多行文本
var str = `` //在反引号里面添加代码
2 可以解析变量
二 定义变量的几种方式
了解 var let const 的使用方式
1 var:没有作用域 变量声明会提升
var age=20
2 let:没有所谓的变量名提升 有作用域:作用域就是从这个变量开始,到这个变量所在的}结束
3 const:定义常量:常量一旦赋值则不能更改
三 解构
解构:就是提取对象或对象中的成员数据的另一种方式
写法一
var arr = [1,3,5,7,9]
var [a,b,c] = arr
console.log(a,b,c)//1 3 5
写法二
var obj = {
name:'jsck'
}
// :后面的是重命名
var [name:mingzi] = obj
console.log(mingzi)//jsck
写法三
var obj = {
name:'jsck',
computer:{
name:‘小米’
}
}
var {computer:{name}}=obj
console.log(name)//小米
总结:如果是对象的解构,必须适应{},吐过是数组的解构,必须是适应[]
四 展开运算符
var arr = [1,2,3]
var arr2 = [a,b,c]
var arr3 = [1,2,3,...arr2]//[1,2,3,a,b,c]