node笔记(三)

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.name,{obj.name}','{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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章