NODE.JS

目录

简介

特点

不适用于node.js的场合

适用于node.js的场合

基本语法

箭头函数(ES6)

高阶函数

闭包

回调函数

事件机制

NODE的全局对象

NODE定时器

BUFFER数据类型

JSON对象

Node.js Express框架

Express中间件

 Express接受请求参数

Ajax请求 


简介

简称node,封装了谷歌的V8引擎,使javascript可以在服务器端运行

特点

(1)非阻塞I/O:又称为异步I/O,当线程遇到I/O操作时,不会以阻塞方式等待I/O操作完成或数据返回,而是将I/O请求转发给操作系统,继续执行下一条指令。

(2)事件驱动:以事件为中心,把每个任务都当做事件处理。

(3)node的执行是单线程的,一个线程只能处理一项任务,要想提高吞吐量必须使用多线程。

      单线程:主线程维护一个事件队列,收到请求后将请求放进事件队列,然后接收下一个请求

node本身是多线程,在JavaScript层面是单线程

不适用于node.js的场合

数据加密和解密

数据压缩和解压

模板渲染

适用于node.js的场合

前后端分离REST API

单页WEB应用

微服务架构

统一WEB应用的UI层

//导入http模块
const http =require('http')
//创建服务器
const httpServer=http.creatServer(function(req.res))
//req:表示请求对象,res:响应对象:服务器端通过该对象客户端发送响应信息
res.writeHead(200,{'Content-Type':'text/plain'})
res.end('Hello world!')//服务端向客户端发送信息
});
//服务器自动监听
httpServer.listen(8089,function(){
console.log('服务器端运行在8089窗口上')
})

nodemon插件:可以监视node程序的改动,自动重启node程序

基本语法

箭头函数(ES6)

使用=>来定义函数

只有一条函数体语句,自带返回return功能,不能带有大括号,带有大括号时需要自己添加return语句

(1)一个参数的箭头函数:

var 变量名 = x =>x

对应的普通函数

var 变量名 =functin(x){

return x;

}

var f=x=>x
var k=f(45)
console.log(k)

(2)带有两个参数

var 变量名 =(x,y)=>x*y

对应的普通函数

var 变量名(x,y)=function(x,y){

return x*y;

}

(3)无参的箭头函数

var 变量名=()=>3*6

var 变量名 =function(){

return 3*6;

}

(4)函数体带有多条语句

var diffAge=(x,y)=>{

var diff=x-y;

return Math.abs(diff);

}

高阶函数

以一个或多个函数作为参数的函数

function f(m,n,fn){
//m,n是普通参数,fn是函数参数,因此fn是高阶函数
return fn(m-n);
}
var t=f(12,9,Math.abs)//把Math对象的abs函数传递给fn
console.log(t)

闭包

当函数作为返回值,或作为参数传递时,该函数成为闭包(函数内部定义函数,可以访问外部函数的参数)

var basePrice=10.0//起步价
var baseMiles=3.0//起步公里数
function taxiPrice(untiPrice,MilesAge){
   function totalPrice(){//函数内部定义函数(闭包),访问外部函数的参数
        if(MilesAge>baseMiles){
          return untiPrice*MilesAge}
           else {
               return basePrice
              }
        }
     return totalPrice()//将函数作为返回值返回
}
 var t=taxiPrice(2.0,5.0)
console.log(t)

ES5通过构造方法创建类

ES6中通过class关键字创建类

回调函数

(1)fs模块:是filesystem(文件系统),是node提供的异步读写文件模块

const fs=require('fs')//导入fs模块
console.log('主程序开始...')
//调用fs的readFile函数异步读取文件(demo.txt)内容
//(1)匿名回调函数:若文件读取异常,err中存放的异常信息
//(2)data参数:从文件中读取的内容
fs.resdFileSync('../text/demo.txt',function(err,data){
if(err){
console.error(err)
console.log(data.toString())
})
console.log('主程序结束...')

事件机制

触发事件:emit('事件名称')

const EvenEmitter=require('events').EventEmitter //引入事件模块
const myEvent=new EventEmitter()//实例化事件对象
//注册事件:seen
myEvent.on('seen',function(who){
console.log('报告,来了一位'+who)
})
myEvent.on('seen',function(){
console.log('欢迎光临!!!')
})
//触发事件
myEvent.emit('seen','女士')

NODE的全局对象

1.__filename代表当前执行的脚本文件的名字(带绝对路径)

2.__dirname代表当前正在执行的脚本文件所在目录

3.Console类

4.process对象:进程对象

示例:使用readline对象+process对象实现终端的输入输出

line事件:在用户输完一行,按下回车就会发生的事件,会将用户输入的数据通过回调函数传回来,可在此方法里处理用户输入的数据

console.log('文件名:'+__filename)//文件名
console.log('目录名:'+__dirname)
const out =getStreamSomwhow()
const myConsole=new console.Console(out,err)
const readline=require('readline')
var r1=readline.creatInterface(
{//创建一个接口
input:process.stdin,//表示标准的输入终端
output:process.stdout//表示标准的输出终端
})
//注册'line'事件
r1.on('line',function(data){
switch(data,trim()){
case'copy':
console.log('复制')
break
case'hello':
console.log('hello world!')
break
case'close':
r1.close()
break
default:
console.log('没有这个指令')
}
})
r1.on('close',function(){
console.log('bye bye');
process.exit(0);
})

NODE定时器

一次性定时器:setTimeOut(函数,间隔时间)

周期性定时器:setInertVal(函数,间隔时间)

即使定时器:setImmediate()

BUFFER数据类型

1.用于处理二进制数据的数据类型

2.一个buffer对象类似于一个整型数组,大小在创建时确定并且不能改变

3.buffer对象的创建

(1)buffer.from([])

(2)buffer.alloc([])

4.作用:用于编码的转换

在文件操作(读写)和网络操作(前后端交互),如果没有显式声明格式,返回数据的默认类型都是buffer

通过使用显式字符编码将Buffer实例与javascript字符串相互替换

将Buffer实例转换成JSON对象

var buf7=Buffer.from([1,2,3,4,5])
var json=buf7.toJSON
console.log(json.data)

json={
type:'Buffer',
data:[1,2,3,4,5]
}
console.log(json.data)

JSON对象

JSON是一种轻量级的数据交换格式,JSON采用完全独立于语言(编程语言)的文本格式,是一种理想的数据交互语言

使用场景:只要应用程序需要将结构化信息作为文本进行交换或存储,即可使用它

{

code:200,

msg:'查询成功'

}

['123','456'

]

格式要求(语法要求)

(1)数据存放在key-value中

(2)数据用逗号分隔

(3)画括号保存对象({ })

(4)方括号保存数组([ ])

var buf1=Buffer.from([1,2,3])
console.log(buf1)

var buf2=Buffer.from('test')
console.log(buf2)

//创建长度为10的buffer对象,默认0进行填充
var buf3=Buffer.alloc(10)
console.log(buf3)
//创建长度为10的buffer对象,由1填充
var buf4=Buffer.alloc(10,1)
console.log(buf4)
//创建buffer对象时,指定编码格式
var buf5=Buffer('Hello World','ascii')
console.log(buf5)

var buf6=Buffer('test')
console.log(btf6)
console.log('十六进制:'+buf6.toString('hex'))
console.log('UTF8'+buf6.toString('utf8'))

Node.js Express框架

Express介绍

Express是一个最小的,灵活的Node.js Web应用程序,提供了一套强大的功能来开发Web和移动应用程序。核心功能

1.允许设立中间件相应HTTP请求

2.定义了用于执行基于HTTP方法和URL不同动作的路由表

3.允许动态渲染基于参数传递给模板HTML页面

安装Express

npm install -g express-generator

查看Express版本号

express--version

创建项目

(1)创建目录

(2)进入该目录执行指令:express 项目名

例如:express hello

(3)进入项目所在目录,执行指令:npm install 安装相关依赖模块

例如 cd hello

hello>npm install

(4)启动项目:npm start--默认项目的端口号是3000

(5)浏览器访问:http://localhost:3000

修改项目监听端口号:./bin/www

安装nodemon模块,实时跟踪源程序的变化,安装完成后打开package.json文件

"scripts":{

"start":"nodemon ./bin/www"

}

bin启动配置文件,在www里修改运行端口号
node_modules存放所有项目依赖库
public用于存放静态资源文件、图片、css、js文件
routers路由文件
views存放页面
package.json项目依赖配置及开发者信息
app.js应用核心配置文件,项目入口

Express中间件

处理客户请求的一系列方法

                          ————>服务端

                                  请求    中间件1处理请求

客户端(浏览器)                 中间件2处理请求

                          <————  路由器处理请求

                                 响应

由中间件方法和请求处理函数组成

中间件方法由Express提供,负责拦截请求

请求处理函数由开发人员编写,处理请求

app.get('请求路径','请求处理函数')

app.post('请求路径','请求处理函数')

app.use

 Express接受请求参数

接受get请求

req.query.参数名

接受post请求

req.body.参数名

接受路由请求参数:定义路由时,在请求路径中传递的参数

req.params

Ajax请求 

Aiax是一种网页开发技术,可以实现页面无刷新更新数据,提高用户浏览网页的体验

基本实现步骤

(1)创建Ajax对象

   var xhr =new XMLHTTPRequest();//xhr就是Ajax对象(异步请求对象)

(2)配置Ajax对象  open()方法    xhr.open('请求方式','请求地址')

(3)发送请求   send()方法    xhr.send()

  (4)获取服务端的响应信息

              xhr.οnlοad=function(){}

(5)获取服务器端相应给客户的数据

xhr.onreadystatechange=function(){}

//创建ajax对象
var xhr=XMLHTTPquest()
//输出ajax对象的状态码
console.log(xhr.readyState);
xhr.open('get','http://loacalhost:3000/params//gets')
console.log(xhr.readyState);
//监听onload事件(看看服务器是否相应),并使用send()方法发送请求
xhr.onload=function(){
console.log(xhr.readyState)//获取状态码
console.log(xhr.responseText)//输出 Hello ,Ajax
}
xhr.send();
//onreadystatechange只有当服务器端响应发生改变时触发
xhr.onreadystatechange=function(){
console.log(xhr.readyState);//获取状态码,如果状态码为4代表数据已经接收完成
if(xhr.readystate===4){
console.log(xhr.responseText);}
}

状态码

4   请求响应已完成,可以使用服务器响应

获取状态码方法

xhr.readyState

获取服务器响应数据

xhr.responseText

跨域&同源

同源

地址里面的协议域名和端口号,相同为同源

同源策略是浏览器安全功能,不同于源客户端没有明确授权时不能读写对方资源,a.com下的js脚本用a.jax读取b.com的数据会报错

跨域

协议、域名、端口号有一个不同就是跨域

针对JavaScript和Ajax,html本身没有跨域

在express项目中解决跨域问题的办法

安装cros模块:npm install cros

在app.js文件中配置cros

app.use('cros')

导入:在app创建之前导入

使用:在app创建之后,在配置路由路径之前

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值