node.js part1

Node.js

Node.js 是一个跨平台JavaScript 运行环境,使开发者可以搭建服务器端的 JavaScript 应用程序。作用:使用Node.js编写服务器端程序

编写数据接口,提供网页资源浏览功能等等

前端工程化:为后续学习Vue和React等框架做铺垫.

node.js

建议大家装nvm来控制node版本

  1. Node.js 是什么?

基于Chrome 的 V8 引擎封装,独立执行JavaScript 代码的环境

  1. Node.js 与浏览器环境的JS最大区别?

Node.js 环境中没有 BOM 和 DOM

  1. Node.js 有什么用?

编写后端程序:提供数据和网页资源等

前端工程化:集成各种开发中使用的工具和技术

  1. Node.js 如何执行代码?

在 VSCode 终端中输入: node xxx.js 回车即可执行(注意路径)

fs模块-读写文件

模块:类似插件,封装了方法/属性

fs模块:封装了与本机文件系统进行交互的,方法/属性语法:
1.加载fs模块对象

const fs=require('fs')/fs是模块标识符:模块的名字

2.写入文件内容 fs.writeFile('文件路径','写入内容',err=>{ //写入后的回调函数})

3.读取文件内容

fs.readFile('文件路径',(err,data)=>{ //读取后的回调函数

//data 是文件内容的Buffer 数据流 })

javascript 复制代码
/**目标:基于 fs 模块读写文件内容
1. 加载 fs 模块对象
2,写入文件内容
3. 读取文件内容
*/
// 1. 加载 fs 模块对象
const fs = require('fs')
//2. 写入文件内容
fs.writeFile('./test.txt', 'hello, Node.js', (err) => {

if (err) console.log(err)
else console.log('写入成功')
})
然后就会出现一个txt文件,里面写的hello node.js

//3.读取文件内容
fs.readFile('./test.txt',(err,data)=>{
 if(err) console.log(err)
 else console.log(data)//68 65 6c 6f........是一个buffer 16进制数据流
 else console.log(data.toString())读出来为空是因为读写是异步的,把读那段嵌套在写的else就可以了
})
默认会覆盖,除非设置成追加模式

老师就是想告诉我们:用path模块实现路径处理,可以解决默认路径非调试文件路径的问题

找不到就会弹出-4058,一个绝对路径和相对路径闹麻了

注意,注意,注意:html中的js的每一句需要分号,不然压缩后会报错,js需要规范书写格式

resultStr是写入内容的参数,又不是回调函数的参数

javascript 复制代码
/* 目标1:压缩 html 代码
* 需求:把回车符 \r,换行符 \n 去掉,写入到新 html 文件中
*1.1读取源 html 文件内容
*1.2正则替换字符串
* 1.3 写入到新的 html 文件中
*/
// 1.1 读取源 html 文件内容
const fs = require('fs')
const path = require('path')
fs.readFile(path.join(_dirname, 'public/index.html'),(err, data)=>{
    if(err) console.log(err)
    else {
        const htmlStr = data.toString()
        //1.2正则替换字符串
        const resultStr = htmlStr.replace(/[\r\n]/g,'')
        console.log(resultStr)
        // 1.3 写入到新的 html 文件中
        fs.writeFile(path.join(_dirname, 'dist/index.html'), resultStr, err =>{
            if (err) console.log(err)
            else console.log'写入成功')
            })
        }
})

url端口号

URL:统一资源定位符,简称网址,用于访问服务器里的资源

端口号:标记服务器里不同功能的服务程序

端口号范围:0-65535之间的任意整数
http://hmajax.itheima.net:80/api/province
协议 域名 端口号 资源路径

注意:http协议,默认访问80端口

web服务

javascript 复制代码
const http=require('http')
const server=http.createServer()
    // 1.2监听request请求事件,设置响应头和响应体
server.on('request', (req, res) => {
//设置响应头---内容类型---普通文本以及中文编码格式
        res.setHeader('Content-Type', 'text/plain; charset=utf-8') 
        // 设置响应体内容,结束本次请求与响应
        res.end('欢迎使用 Node.js 和 http 模块创建的Web服务')
})
        // 1.3配置端口号并启动Web服务
server.listen(3000, () => {
    console.log('Web服务启动成功了') 
})

防火墙也出来了,就会出现网络服务,想要终止,只要ctrl+c即可

在浏览器打开localhost:3000即可打开

浏览时钟例子

req是你向服务器请求的数据对象,res则是服务器对客户端发出的响应内容,以及相应格式对象

javascript 复制代码
const fs = require('fs')
const path = require('http')
// 1,基于http模块,创建Web服务
const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
    // 2. 使用 req.url 获取请求资源路径,并读取 index.html 里字符申内容返回给请求方
    if (req.url === '/index.html') {
        fs.readFile(path.join(__dirname, 'dist/index.html'), (err, data) => {
            if (err) console.log(err)
            else {
                // 设置响应内容类型---html超文本字符串,让浏览器解析成标签网页等
                res.setHeader('Content---Type', 'text/html;charset=utf---8')
                res.end(data.toString())
            }
        })
    } else {
        // 3.其他路径,暂时返回不存在提示
        res.setHeader('Content---Type', 'text/plain;charset=utf---8')
        res.end('你要访问的资源不存在')
    }
})
server.listen(8080, () => {
    console.log('Web 服务启动成功了')
})

模块化

什么是模块化?

定义:

CommonJS 模块是为Nodejs打包JavaScript代码的原始方式。Nodejs还支持浏览器和其他JavaScript 运行时使用的 ECMAScript模块标准。 在Node.js中,每个文件都被视为一个单独的模块。

概念:项目是由很多个模块文件组成的

好处:提高代码复用性,按需加载,独立作用域使用:需要标准语法导出和导入进行使用

commonjs标准

需求:定义utils.js模块,封装基地址和求数组总和的函数

使用:

1 . 导出:modiule.exports = {}

2 .导入:require('模块名或路径')

javascript 复制代码
const baseURL = 'http://hmajax.itheima.net'
const getArraySum = arr => arr.reduce((sum, val) => sum += val, 0)
module.exports = {
对外属件名1: baseURL,
时外属性名2: getArraySum
}

模块名或路径:

/内置模块:直接写名字(例如:fs, path, http)

/自定义模块:写模块文件路径(例如:./utils.js)

不带大括号,是简写,如果带了大括号,记得return值

ECMAscript标准,命名导出导入

1.Node.js支持哪2种模块化标准? >CommonJS标准语法(默认)

>ECMAScript 标准法

2.ECMAScript 标准,命名导出和导入的语法? >导出:export 修饰定义的语句

>导入:import{同名变量}from'模块名或路径'

3.ECMAScript 标准,默认导出和导入的语法? >导出: export default {}

>导入:import变量名from'模块名或路径

软件包管理npm

1 .初始化清单文件:npm init -y (得到 package json文件,有则略过此命令)

2 .下载软件包 :npmi软件包名称

3 .使用软件包

在空白文件夹,终端npm init -y,然后npm i dayjs即可

1,报错 idealTree:05: sill idealTree buildDeps看2

2.在终端打npm cache verify清一下npm内存再重新下载dayjs

javascript 复制代码
/**
* 目标:使用 npm 下载 dayjs 软件包来格式化日期时间
*1.(可选)初始化项目清单文件,命令:npm init -y
*2.下载软件包到当前项目,命令:npmi软件包名称
*3.使用软件包
*/
//3,使用软件包
const dayjs = require('dayjs')
const nowDateStr = dayjs().format('YYYY-MM-DD')
console.log(nowDateStr)
 

安装所有依赖

传输时,就是因为这些包的积极太大上传下载太浪费时间,软件包会舍弃

输入npm i,下载package.json的所有软件包

npm -全局软件包nodemon

软件包区别:

本地软件包:当前项目内使用,封装属性和方法,存在于node_modules

全局软件包:本机所有项目使用,封装命令和工具,存在于系统设置的位置

nodemon作用:替代node命令,检测代码更改,自动重启程序

使用:

1 .安装:npm i nodemon - g ( -g代表安装到全局环境中)

2 .运行:nodemon待执行的目标js文件

需求:启动准备好的项目,修改代码保存后,观察自动重启应用程序

输入server.js,打开服务,会显示nodemon的状态

Node.js与Webpack-14.npm全局软件包-nodemon_哔哩哔哩_bilibili,大量的弹幕可以帮助你

相关推荐
前端李易安11 小时前
Webpack 热更新(HMR)详解:原理与实现
前端·webpack·node.js
Ztiddler21 小时前
【npm设置代理-解决npm网络连接error network失败问题】
前端·后端·npm·node.js·vue
前端青山1 天前
webpack进阶(一)
前端·javascript·webpack·前端框架·node.js
老攀呀1 天前
安装多个nodejs版本(nvm)
node.js
佚名程序员1 天前
【Node.js】全面解析 Node.js 安全最佳实践:保护您的应用
安全·node.js
zxg_神说要有光1 天前
快速入门 AI:调用 AI 接口生成 React 组件
前端·javascript·node.js
佚名程序员1 天前
【Node.js】深入理解 V8 JavaScript 引擎
前端·javascript·node.js
赵闪闪1681 天前
Node.js 安装与开发环境配置全指南
node.js
前端与小赵2 天前
什么是Webpack,有什么特点
前端·webpack·node.js
生椰拿铁You2 天前
03 —— Webpack 自动生成 html 文件
前端·webpack·node.js