nodejs回顾

nodejs概述

nodejs基于谷歌的V8引擎(JS解释器),运行在服务器的语言,基于JS。
http://nodejs.org 英文官网
http://nodejs.cn 中文

  1. 对比JS和NODEJS
    (1)js运行在浏览器端,存在兼容性的问题;nodejs运行在服务器端,不存在兼容性问题。
    (2)两者都是内置(ES)对象、自定义对象、宿主对象(根据执行环境的不同)。
    (3)js用于网页中的交互效果,nodejs用于服务器端操作,例如:创建web服务器、操作数据库。。。

  2. nodejs的执行方式
    脚本模式 node c:/xampp/…/01.js
    交互模式
    node 回车 进入交互模式
    两次ctrl+c或者输入 .exit 退出交互模式

  3. 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, ‘abcde’);
    将buffer数据转为普通字符串
    buf.toString()

  5. 模块系统
    模块是一个预定义好的功能体,在nodejs下,每一个文件都是一个模块。
    在NODEJS下分为自定义模块、核心模块(官方提供)、第三方模块
    在NODEJS下,一个文件就是一个模块,文件中的代码默认是被一个构造函数所包含。
    以下红色的代码都是nodejs自动为每个文件添加的。

(function(exports,require,module,__filename,__dirname){
	程序编写的代码
})

__filename 当前文件的完整路径的文件名称
__dirname 当前文件的完整路径
require 是一个函数,用于引入模块; require(’./07_2.js’)
module 指代当前的模块
module.exports 当前模块导出的对象(公开的内容),可以供其他的模块使用的属性和方法。
exports 等价于module.exports

以路径开头不以路径开头
文件模块require(’./circle.js’)常用于用户自定义模块,如果后缀名是js是可以省略的
目录模块require(’./02_2’)会在当前目录下的02_2中寻找package.json文件中的main属性对应的值,如果不存在该文件,则自动寻找index.jsrequire(‘04_2’)要求引入的目录出现在node_modules中,如果找不到,则会到上一级目录查找,直到顶层。常用于第三方模块

第三方模块(包)

自动下载地址 http://www.npmjs.com
需要已经安装好了npm,随着nodejs一起安装。
切换到要下载的目录
(1)cd 完整的目录 回车
        change directory
(2)在要下载的目录空白区域,按住shift,单击右键->在此处打开powershell窗口
使用npm安装
npm install 包的名称

核心模块

是nodejs官方提供的模块,可以直接引入,不需要创建。
(1)查询字符串模块——querystring
查询字符串:浏览器向服务器发送请求,传递数据的一种方式
协议,域名(IP),端口
http://www.codeboy.com:80/product_details.html?lid=5&name=dell
parse() 将查询字符串解析为对象
stringify() 将对象转为查询字符串

(2)url模块——url
parse()将url解析为对象
protocol 协议
hostname 主机(域名/ip地址)
port 端口
pathname 文件在服务器上的路径
query 查询字符串
format() 将对象转换成url
query属性对应的是对象格式

全局函数
parseInt/parseFloat/encodeURI/decodeURI/isNaN/
isFinite/eval
(1)一次性定时器
开启定时器
var timer=setTimeout(回调函数, 间隔的时间);
当间隔时间到了,执行回调函数;单位是毫秒
清除定时器
clearTimeout(timer);

(2)周期性定时器
开启定时器
var timer=setInterval(回调函数, 间隔的时间);
每隔一段时间,执行一次回调函数
清除定时器
clearInterval(timer)

(3)立即执行定时器(了解)
process.nextTick(回调函数)
在当前事件的结尾执行
var timer=setImmediate(回调函数)
清除 clearImmediate(timer)
在下一组事件的开头执行
process.nextTick比setImmediate更先一步执行

文件系统模块——fs

用于操作服务器的文件(目录),例如:创建目录、删除目录、读取目录、创建文件、删除文件、写入文件。。。
(1)创建目录
fs.mkdir(路径, 回调函数)
fs.mkdirSync(路径)
(2)移除目录
fs.rmdir(路径, 回调函数)
(3)读取目录
fs.readdir(路径, 回调函数) —— 异步
fs.readdirSync(路径) —— 同步

对比同步和异步的区别
同步会阻止后续代码的执行,只有执行完以后才会执行后续代码;是通过返回值来获取结果。
异步不会阻止后续代码的执行,在整个程序的最后执行,是通过回调函数来获取结果。常用于一些比较耗时的操作。

(4)写入文件
fs.writeFile(文件路径, 数据, 回调函数)
如果文件不存在,则会创建文件,然后写入数据;如果文件已经存在,则会清空文件的内容,然后写入

http协议

是浏览器和web服务器之间的通信协议
(1)通用头信息
Request URL: 请求的URL,向服务器端获取的内容
Request Method: 请求的方法 get/post get获取内容,post常用于向服务器端传递安全较高数据
Status Code: 响应的状态码
      2**:服务器成功的响应
      3**:响应的重定向,跳转到另一个URL
      4**:客户端错误
      5**:服务器错误
Remote Address: 请求的服务器的IP地址和端口号

(2)相应头信息
Connection: keep-alive; 连接的方式:持续连接
Content-Type: 响应的文件类型
Transfer-Encoding: 响应时的传输方式,chunked(分段传输)

(3)请求头信息

(4)请求主体
可有可无,浏览器端向服务器端传递的数据

http模块

可以模拟浏览器向服务器端发送请求;也可以创建web服务器
(1)模拟浏览器
http.get( url, callback )
url 请求的url
callback 是回调函数,用来获取服务器端的响应
res 响应的对象
res.statusCode 响应的状态码
res.on(‘data’, (buf)=>{
通过事件来获取服务器端响应的数据,当有数据传递的时候,自动调用回调函数,把数据放入到buf中,格式为buffer
})

(2)创建web服务器

var server=http.createServer() //创建web服务器
server.listen(3000) //分配端口,监听3000端口的变化
server.on(‘request’, (req,res)=>{ })
//接收浏览器的请求,是事件的形式,一旦有请求,自动执行
req 请求的对象
url 请求的URL,用于告诉服务器要获取的内容
method 请求的方法,直接在地址栏输入默认都是get
headers 请求的头信息
res 响应的对象
writeHead(状态码, { }) 设置响应的状态码和头信息;如果要跳转需要设置Location属性。
write() 将响应的数据发送到浏览器中
end() 结束响应

express框架

基于nodejs,用于构建web服务器的框架。
官网:www.exrpessjs.com.cn
安装:npm install exrpess
const express=require(‘express’); //引入下载的模块
var server=express(); //创建web服务器
server.listen(3000); //监听3000端口

  1. 路由
    浏览器向web服务器发送请求,web服务器会根据请求的URL和请求的方法来做出响应
    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)=>{
    获取的结果是buffer数据,转成普通字符串后变成了查询字符串,需要使用查询字符串模块解析为对象
    });

  3. 使用路由传递数据——路由传参
    设置路由中接收

 server.get('/detail/:lid', (req,res)=>{
   // :lid 设置数据的名称
   req.params   //获取路由传递的数据,格式为对象
 })

浏览器传递数据
http://127.0.0.1:3000/detail/5
5就是传递的数据,使用lid来接收

  1. 路由器
    路由在使用过程中,不同的模块可能出现相同的URL,把同一个模块下的所有路由挂载到特定的前缀。
    例如:商品模块下的路由挂载到product,访问形式/product/list,用户模块下的路由挂载到user,访问形式/user/list
    路由器就是自定义模块(js文件),把同一个模块下的路由放到一起。
const express=require('express');
var router=express.Router();  //创建空的路由器对象
router.get('/list', (req,res)=>{      }); //往路由器中添加路由
module.exports=router; //导出路由器

在web服务器下使用路由器

const productRouter=require('./product.js');//引入路由器模块
server.use('/product', productRouter);//把路由器挂载到 /product下,访问形式 /product/list
  1. 中间件
    中间件的作用为主要的业务逻辑所服务
    分为应用级中间件、路由级中间件、内置中间件、第三方中间件、错误级中间件
    (1)应用级中间件
    每一个中间件就是调用一个函数,需要配合其他的中间件或者路由使用
    server.use( 函数 ) 拦截所有的路由
    server.use( ‘/reg’, 函数 ); 拦截特定的路由
    练习:创建路由(get,/view)响应浏览器的次数,每次请求记录的次数加1。
    在路由的外部初始化一个变量,值为0;在中间件中变量加1,在路由中变量发送到浏览器。
    (2)内置中间件
    server.use(express.static(‘目录’))
    把静态资源文件托管到某一个目录,如果浏览器请求静态资源,则自动到这个目录下查找。
第三方中间件body-parser

可以将post请求的数据解析为对象
使用中间件

const bodyParser=require('body-parser');
server.use(bodyParser.urlencoded({
  extended:false
}));
urlencoded  将post请求的数据解析为对象
extended:false  不适用第三方的qs模块,而是使用核心模块querystring将数据解析为对象

在路由中获取数据
req.body 返回对象格式

MYSQL模块

增 INSERT INTO emp VALUES(NULL,‘tom’…);
删 DELETE FROM emp WHERE eid=5;
改 UPDATE emp SET ename=‘tom’,sex=‘1’ WHERE eid=5;
查 SELECT * FROM emp;
mysql.exe -h127.0.0.1 -P3306 -uroot -p

(1)普通连接

var connection=mysql.createConnection({ }); 创建连接对象,传递mysql服务器的IP地址/域名,端口,用户名,密码,使用的数据库
connection.connect();  执行连接
connection.query(sql,callback)     sql要执行的SQL语句,
  callback回调函数,获取SQL语句结果。
connection.end(); 执行完所有的SQL语句,关闭连接。

(2)使用连接池

var pool=mysql.createPool({ }); 创建连接池对象,传递mysql服务器的IP地址/域名,端口,用户名,密码,使用的数据库,设置连接池的大小(connectionLimit)
 pool.query(sql,callback)  sql执行的SQL语句,callback回调函数,获取SQL语句的执行结果。

(3)分页查询
select * from xz_user LIMIT start,count;
页码 每页数量10
start = (页码-1)*count
第1页 0~9
第2页 10~19
第3页 20~29
创建商品路由器product.js,创建路由器导出;在web服务器app.js引入商品路由器,挂载到/product下
get /list

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值