前端跨域
1. 浏览器默认的一种'同源策略'
2. 协议- 域名- 端口不统一造成的跨域
1. 后端安装 : yarn add cors - S
2. 引入 : const cors = require ( 'cors' )
3. 直接挂载 : App. use ( cors ( ) )
header ( "Access-Control-Allow-Origin: * " )
1. 原理 : 利用一些带有src属性的标签 ( script) 能够不受限制并切合callback回调函数, 得到结果
2. 直接在script的src标签上加入访问端口地址, 然后执行一个fn函数打印形参
< script src= '端口' > < script>
function fn ( obj ) {
console. log ( obj) }
3. 封装一个JSONP , 跟ajax差不多原理
function JSONP ( setting = {
} ) {
var fnName = 'Show' + parseInt ( Math. random ( ) * 100 )
window[ fnName] = setting. success
var oScript = document. createElement ( 'script' )
let url= setting. url+ '?' + Params ( setting. data) + setting. Callback+ '=' + fnName
oScript. setAttribute ( 'src' , url)
document. body. appendChild ( oScript)
oScript. onload = function ( ) {
this . remove ( )
}
}
提示 : setting就是ajax, 里面要填的一些请求值
封装好了后, 就可以用类似ajax的方式调用访问端口拿到数据
JSONP ( {
url : '访问的端口' ,
data : {
wd : '你好'
} ,
Callback : 'cb' ,
success : function ( data ) {
console. log ( data)
}
} )
一,ES6新增
1,语法变化
1. let const 定义一个变量
2,解构赋值
一, 解构对象赋值
var obj= {
name : "fly" ,
age : 18
}
var {
name, age} = obj
二, 解构数组赋值
var arr= [ 1 , 2 , 3 , 4 ]
var [ a, b, c, d] = arr
var [ , , c, d] = arr
var [ , ... Arr] = arr
console. log ( Arr)
console. log ( ... Arr)
3,字符串扩展
str. includes ( "a" )
str. startsWith ( "a" )
str. endsWith ( "z" )
'x' . padStart ( 5 , 'ab' )
'x' . padEnd ( 5 , 'ab' )
var str= "fly"
var str1= ` <div> ${
str} </div> `
4,数组的扩展
arr. indexOf ( )
arr. forEach ( )
语法 : arr. forEach ( ( el, index, arr ) => {
执行} )
el : 数组里面的每一个数值
index : 数值里面每一个数值的下标
arr : 数组本身
arr. map ( )
语法 : 跟forEach ( ) 语法一样
for . . of
语法 : for ( var el of arr. keys ( arr) ) {
console. log ( el) }
keys : el得到下标 values: el得到值 entries: el得到实例 ( 下标和值 )
arr. filter ( )
语法 : Arr= arr. filter ( el ) {
return el> 3 }
arr. some ( )
语法 : arr. some ( ( el ) => {
if ( el== 20 ) {
return el } } )
obj. findIndex ( )
语法 : obj. findIndex ( ( el ) => {
if ( el. id == 0 ) {
return true } } )
obj. find ( )
语法 : obj. find ( ( el ) => {
if ( el. id == 0 ) {
return true } } )
5,对象的扩展
一. 对象的简写
语法 : var obj= {
name, age : 18 }
二, 对象的拷贝 ( 浅拷贝↓ 深拷贝: 用JSON 转字符串再转对象 )
obj. assign ( )
语法 : obj1 = obj. assign ( {
} , obj)
6,函数的扩展
一, 设置默认参数
function show ( str= "fly" ) {
}
二, 默认参数解构赋值
function show ( {
x, y= 2 } ) {
} show ( {
x : 1 } )
三, reset和扩展运算符
function show ( ... rest) {
}
... 扩展运算符
四, 箭头函数
( ) => {
}
7,class类
继承 : 子类拥有父类的属性和方法, 子类可以重写父类的方法, 子类可以新增自己的属性和方法
class Person {
constructor ( name, age ) {
this . name= name
this . age= age
}
say ( ) {
console. log ( this . name)
}
}
var P = new Person ( '大佬' , '18' )
class Abc extends Person {
construstonr ( name, age, upw ) {
super ( name, age)
this . upw= upw
}
mysay ( ) {
console. log ( this . upw)
}
}
var A = new Abc ( '小炮' , '19' , '258' )
二,NodeJs
Nodejs是一个基于 Chrome V8 引擎的 JavaScript 运行环境, Ndoejs使用了一个事件驱动, 非阻塞式I / O 的模型, 使其轻量又高效, Nodejs的包管理器 npm , 是全球最大的开源库生态环境
下载地址 : http: / / nodejs.cn /
卸载 : 删除C : \Program Files\nodejs C : \users\用户名\appData\Roaming\npm 然后重装
0,express
1. express项目生成器
2. 安装express框架
第一步 : npm init - y
第二步 : 在项目目录下安装 cnpm i express -- save- dev
1,fs模块
简介 : 主要用来文件的读取, 写入, 修改, 追加, 重命名, 新建
引入 : const fs= require ( "fs" )
fs. radFile ( "./node.txt" , 'utf8' , ( err, data ) => {
if ( err) return console. log ( err. message)
console. log ( data)
} )
fs. writeFile ( './node.txt' , '你们好' , ( err ) => {
if ( err) return console. log ( ree. message)
console. log ( "写入成功" )
} )
fs. appendFile ( './node.txt' , '你们好' , ( err ) => {
if ( err) return console. log ( ree. message)
console. log ( "写入成功" )
} )
fs. copyFile ( './node.txt' , 'npm.txt' , ( err ) => {
if ( err) return console. log ( err. message)
console. log ( '拷贝成功' )
} )
2,path路径
path 模块提供用于处理文件路径和目录路径的实用工具。
引入 : const path= require ( "path" )
path. join ( __dirname, './res' , '/123.txt' )
3,http静态服务器
引入 : const http= require ( "http" )
const server= http. createServer ( )
server. on ( 'request' , ( req, res ) => {
} )
server. listen ( 3000 , ( ) => {
console. log ( "服务器启动中" ) } )
三,npm模块
一, 中间件的特性
1. 中间件就是一个普通函数, 有三个参数, req, res, next
2. 中间件需要用use执行, 先安装, 后执行, 后续执行一定要加next ( )
二, npm切换淘宝镜像
npm config set registry https: / / registry. npm. taobao. org
npm config get registry
npm install yarn - g
npm install - g cnpm -- registry= https: / / registry. npm. taobao. org
三, npm/ cnpm/ yarn一些常用命令
npm init - y
npm install
npm i 包名 ( express) - save- dev
- g
-- save
-- save- dev
npm uninstall 包名 ( express) - save- dev
操作跟npm一摸一样, 只是npm变成了cnpm
操作跟npm一摸一样, 只是npm变成了yarn
1,自定义模块
安装 : npm init - y
设置 : 文件夹内默认访问的主文件路径 package . json
暴露 : module. exports= {
}
2,querystring模块
解析 : 查询字符串模块, 一般是对http请求所带的数据进行解析, 对应四个方法
引入 : const querystring= require ( "querystring" )
语法 : querystring. parse ( name= ygy& age= 18 ) 转化后 {
name : 'ygy' , age : 18 }
语法 : querystring. stringify ( {
name : 'ygy' , age : 18 } ) 转化后 name= ygy& age= 18
语法 : querystring. escape ( str) 转化后 % E5 % AD % 97 % E7 % AC % A6 % E4 % B8 % B2
语法 : querystring. unescape ( % E5 % AD % 97 ) 转化后 '字符串'
3.mysql
安装 : cnpm i mysql -- save- dev ( 可以缩写成 - D )
引入 : const mysql= require ( "mysql" )
var connection= mysql. createConnection ( {
host : "localhost" ,
user : "root" ,
password : "root" ,
database : "users"