一、简介
- Node.js是基于Chrome的V8 JavaScript引擎构建的JavaScript运行时环境,使用事件驱动的非阻塞I/O模型,它拥有全世界最大的开源库生态系统npm
- node.js是一个软件,它是js的代码运行环境,可以运行js代码然后实现服务器的功能
- node 是开源的免费的环境,性能好速度快资源占用小但不安全
- node不能操作页面 没有DOM和BOM
二、特点
(1)模块化
- node.js的开发是模块化开发的思想
- 把具有一些相同功能的代码集成为一个模块:方便扩展 维护管理 更有利于开发大型项目
- 模块主要是由:node系统自带的模块、第三方模块和自定义模块组成
- 第三方模块几乎都是由npm来管理
- npm是一个集成了当前世界上最多开源库的生态系统
- npm社区是node.js的模块化社区 是全世界最大的模块市场 在2018或者2019被微软收购
(2)事件驱动(基于回调函数)
- 回调函数是事件驱动的具体实现
- 把事件添加到事件池(event loop 事件池)让异步任务去子线程中执行,然后注册一个事件 任务执行完毕以后就回到主线程执行回调函数
(3)非阻塞I/O操作模型
- 底层c/c++是多线程 为上层js提供异步编程接口,实现CPU多核处理的优势
(4)单线程
- node的上层js业务代码是单线程语言
- node.js的主线程是程序员写的线程代码(js代码)由v8运行 但它提供的异步函数是底层c/c++在开启线程执行任务
三、控制台常用指令
1、在某个文件夹下路径上输入cmd,就会在当前的路径下运行cmd.exe
2、node xxx.js文件 用node环境去运行js文件
3、cls 清除控制台屏幕上的打印信息
4、ctrl+c 停止程序运行
5、上下键 输入过的指令历史
四、http模块
- var app=http.createServer((req,res)=>{}) 创建一个服务器
- app.listen(81) 端口的意义:ip是访问计算机的标志 端口可以进入计算机的具体哪一个程序
- res.setHeader( ' Content-Type ' , 'text/plain; charset=utf8 ') 设置编码和数据包格式
- res.write("data") 可以多次调用 代表给前端传输数据
- res.end() 可传输数据也可不传输,是当前这一次网络请求结束的标志,一旦执行了就断开连接
- req.url 前端给后端发送网络请求的网址"http://ip:port"后面的部分字符串 解析url来做出不同页面的网址 和不同参数传不同数据网址
示例:
//引入官方的http模块 这个模块可以调用函数来创建函数
var http = require("http")
//创建一个服务器 回调函数不会直接运行 会在用户每次访问当前计算机的IP下的8081端口
var app = http.createServer((req, res) => {
//判断用户输入的网址
if (req.url == "/index") {
//设置数据的头部信息为html文本文档,编码为utf8
res.setHeader(' Content-Type ', 'text/plain; charset=utf8 ')
//持续写入数据包中
res.write("<h1>hello</h1>")
res.write("<h1>world</h1>")
//最后一次写入数据包,并断开连接
res.end("你好,世界")
}
})
//用创建出来的服务器监听端口
app.listen(8081)
//在用户浏览器地址栏输入:http://服务器电脑的ip:8081/index
//每当用户访问一次,后端的回调函数就会执行一次
运行结果:
(一)发送文字到前端
示例:
var http = require("http")
var app = http.createServer((req, res) => {
if (req.url == '/home') {
res.setHeader( 'Content-Type', 'text/html; charset=utf8 ') //防止乱码
res.end("欢迎来到首页!")
} else {
res.end("not found")
}
})
app.listen(8888)
运行结果:
五、fs模块
读取文件:
- fs.readFile(path,(err,data)=>{})
- path 填路径 可以绝对可以相对
- err 代表读取失败
- data 代表读取成功 是一个buffer类型的数据(二进制数据流) 可通过toString()转化为字符串
注意: res.end()方法接受 字符串或者buffer
示例:
//引用fs系统自带的模块 操作文件系统
var fs=require("fs")
//读取文件 无论是否访问到都会返回数据err or data
fs.readFile(("./img/rose1.jpg"),(err,data)=>{
console.log(err,data)
})
(一)发送图片到前端
示例:
var http=require("http")
var fs=require("fs")
var app=http.createServer((req,res)=>{
if(req.url=="/index"){
fs.readFile("./img/rose1.jpg",(err,data)=>{
if(!err){
res.end(data)
}else{
res.end("出错啦")
}
})
}else{
res.end("NotFound 404")
}
})
app.listen(8080)