nodejs 简介
1.Node.js官网地址:Node.jsNode.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
https://nodejs.org/en/
1.Node.js 是一个构建于 Chrome V8引擎之上的一个Javascript 运行环境
Node
是
一个运行环境
,作用是让js拥有开发服务端的功能
2.nodejs的作用 : 使用js语言开发服务器
说大白话: 做后台事的,抢java和python饭碗
如何确认当前电脑是否已经安装了Node环境
打开终端,输入 node -v
,如果能看到版本号则说明当前电脑已经安装Node环境,如果提示Node不是内部或外部命令
,则表示未安装
一旦安装了node,则会自动一并安装npm
npm介绍
1.npm
全称node package manager
官方推出的包管理工具
不需要额外安装,安装node之后自带
因为服务器不在国内,所以有时候安装特别慢,甚至无法成功
2.npm更改镜像源提升网速
打开终端执行命令修改镜像源
npm config set registry https://registry.npm.taobao.org/
查看当前npm得镜像源:
npm config list
服务端js与客户端js区别
1.客户端JS由三部分组成
ECMAScript:确定js的语法规范
DOM:js操作网页内容
BOM:js操作浏览器窗口
2.服务端JS只有ECMAScript
因为服务端是没有界面的
==在nodejs中使用dom与bom的api程序会报错==
/*
1.前端js组成部分: ECMAScript,DOM,BOM
ECMAScript: 确定js语法规范
变量,数据类型,运算符与表达式,流程控制语句
DOM: js操作页面类型
document
BOM: js操作浏览器窗口
window
2.服务端js组成部分: ECMAScript
*在nodejs中,不能使用DOM语法 和 BOM语法
*/
const a = 10
const b = 20
console.log(a > b ? a : b)
nodejs模块化介绍
1.nodejs是一个渐进式框架, 我们后面要学习的vue框架也是渐进式框架
2.什么是渐进式框架呢 : 一个功能对应一个模块(js文件), 需要用的时候导入即可
说人话:
非渐进式框架 : 套餐, 一次性导入所有的功能。 无论是的项目用还是不用(浪费资源)
渐进式框架 : 自助餐。 吃什么用什么,不浪费。(节省资源)
fs文件模块(读写文件)
//1.导入模块,使用模块
//const 对象名 = require('文件路径')
const fs = require('fs')
//2.使用模块
/**
* @description: 读取文件
* @param {string} path: 文件路径
* @param {string} encoding: 文件编码 默认二进制 utf8:中文 一般不传
* @param {function} (err,data)=>{err: 错误信息,data:读取的信息}
* @return:
*/
fs.readFile(`${__dirname}/data/aaa.txt`, 'utf8', (err, data) => {
if (err) {//有err,失败
throw err
} else {//没有err,成功
console.log(data)
}
})
同步与异步区别
const fs = require('fs')
/*
js从上往下解析代码流程
1.判断是同步还是异步
2.如果是同步,则立即执行
3.如果是异步,则不执行,而是放入事件循环中(Event Loop)
4.所有代码解析完毕之后,开始执行事件循环中的异步代码
*/
/*
异步操作 事件 定时器 ajax
1.不会阻塞线程(性能高)
2.无序执行
3.有回调函数
*/
/*
同步操作
1.会阻塞线程(性能低)
2.有序执行
*/
/*
区别
1.执行顺序: 异步无序执行,同步有序执行
2.执行优先级: 先执行同步,后执行异步
3.回调函数: 异步一般有回调
*异步一般有回调,但不是所有回调都是异步
4.性能: 同步阻塞线程,异步不会阻塞线程
*/
//异步async
fs.readFile(`${__dirname}/data/aaa.txt`,(err,data)=>{
if (err) {
throw err
} else {
console.log(1111);
}
})
fs.readFile(`${__dirname}/data/aaa.txt`,(err,data)=>{
if (err) {
throw err
} else {
console.log(2222);
}
})
fs.readFile(`${__dirname}/data/aaa.txt`,(err,data)=>{
if (err) {
throw err
} else {
console.log(3333);
}
})
//同步async
const datal = fs.readFileSync(`${__dirname}/data/aaa.txt`)
console.log(4444);
区别
1.执行顺序: 异步无序执行,同步有序执行
2.执行优先级: 先执行同步,后执行异步
3.回调函数: 异步一般有回调
*异步一般有回调,但不是所有回调都是异步
4.性能: 同步阻塞线程,异步不会阻塞线程
try-catch捕捉异常
/*
try-catch: 用于捕捉代码异常
代码出现爆红(语法错误),也不会对后面的代码产生影响
*/
try {
let obj = {}
for (let i = 1; i <= 5; i++) {
obj.age++
}
console.log(obj);
} catch (err) {
console.log(err)
}
console.log(111);
/*
try-catch作用:捕捉代码异常,且不影响后面代码执行
try{
需要执行的代码
}catch(err){
如果try中的代码执行错误了,就会执行catch代码
})
*/
nodejs中的相对路径
//1.导入fs模块
const fs = require('fs')
//2.使用模块
fs.readFile(`${__dirname}/aaa.txt`, 'utf8', (err, data) => {
if (err) {
throw err
} else {
console.log(data);
}
})
//在nodejs中,读取文件一般不能使用相对路径.只能用绝对路径
/*
a.注意点: node中的相对路径: ./ 不是相对于当前文件所在路径,而是相对于执行node命名的文件夹路径
在服务端开发中,一般不要使用相对路径,而使用绝对路径
b.解决方案:在nodejs中,每一个js文件都有两个全局属性,它可以帮助我们获取到文件的绝对路径
__filename:当前js文件自己绝对路径
__dirname:当前js文件目录绝对路径
*/
/*
如果想要获取当前文件夹下其他文件绝对路径,可以使用 __dirname属性来拼接
*/
console.log(__filename);
console.log(__dirname);
path路径模块拼接路径
使用path模块拼接文件路径与 使用 '+'连接符拼接的好处
1.会自动帮我们正确添加路径分隔符 '/',我们无需手动添加
2.当我们路径格式拼接错误的时候,能自动帮我们转换正确的格式
//导入fs模块
const path = require('path')
let newPath = path.join(__dirname,'aaa.txt')
console.log(newPath)
console.log(`${__dirname}/aaa.txt`)
/*
使用path模块拼接文件路径与 使用 '+'连接符拼接的好处
1.会自动帮我们正确添加路径分隔符 '/',我们无需手动添加
2.当我们路径格式拼接错误的时候,能自动帮我们转换正确的格式
*/
http模块搭建服务器
//1.导入模块(安装服务器软件 phpstudy)
const http = require('http')
//2.创建服务器(开启软件窗口)
/*
参数:回调函数
req: request 请求报文
处理
res: response 响应报文
*/
const app = http.createServer((req, res) => {
//获取客户端请求路径
console.log(req.url,decodeURI(req,url))
})
//3.开启服务器(点击软件窗口启动按钮)
/*
第一个参数:端口号 一般1000-60000之间
第二个参数:ip地址 默认不写 就是本地ip
第三个参数:成功回调
*/
//本机iP 127.0.0.1
app.listen(3000, '192.168.88.168', () => {
console.log('服务器开启成功')
})
http模块根据不同请求响应不同数据
//1.导入模块(安装服务器软件 phpstudy)
const http = require('http')
//2.创建服务器(开启软件窗口)
/*
参数:回调函数
req: request 请求报文
处理
res: response 响应报文
*/
const app = http.createServer((req, res) => {
//获取客户端请求路径
console.log(req.url,decodeURI(req,url))
//处理
if (req.url === '/index') {
res.end('index')
} else if (req.url === '/login') {
res.end('login')
} else {
//响应报文
res.end('404 not found')
}
})
//3.开启服务器(点击软件窗口启动按钮)
/*
第一个参数:端口号 一般1000-60000之间
第二个参数:ip地址 默认不写 就是本地ip
第三个参数:成功回调
*/
//本机iP 127.0.0.1
app.listen(3000, '192.168.88.168', () => {
console.log('服务器开启成功')
})
http响应客户端HTML文件
//1.导入模板
const http = require('http')
const fs = require('fs')
//2.创建服务器
const app = http.createServer((req, res) => {
//请求报文
console.log(req.url);
//处理
if (req.url === '/index') {
fs.readFile(`${__dirname}/index.html`, (err, data) => {
if (err) {
throw err
} else {
res.end(data)
}
})
} else if (req.url === '/login') {
fs.readFile(`${__dirname}/login.html`, (err, data) => {
if (err) {
throw err
} else {
res.end(data)
}
})
} else {
//响应报文
res.end('404 not found')
}
})
//3.开启服务器
app.listen(3000, () => {
console.log('服务器开启成功')
})