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,大量的弹幕可以帮助你

相关推荐
一个很帅的帅哥10 小时前
实现浏览器的下拉加载功能(类似知乎)
开发语言·javascript·mysql·mongodb·node.js·vue·express
Bang邦14 小时前
使用nvm管理Node.js多版本
前端·node.js·node多版本管理
新知图书14 小时前
Node.js快速入门
node.js
FakeOccupational15 小时前
nodejs 007:错误npm error Error: EPERM: operation not permitted, symlink
前端·npm·node.js
亦舒.15 小时前
JSDelivr & NPM CDN 国内加速节点
前端·npm·node.js
代码搬运媛16 小时前
code eintegrity npm err sha512
前端·npm·node.js
猿来如此呀19 小时前
运行npm install 时,卡在sill idealTree buildDeps没有反应
前端·npm·node.js
八了个戒1 天前
Koa (下一代web框架) 【Node.js进阶】
前端·node.js
谢尔登1 天前
【Node.js】RabbitMQ 不同交换器类型的使用
node.js·rabbitmq·ruby
weixin_441018351 天前
webpack的热更新原理
前端·webpack·node.js