Node.js基础

Node.js

基于Chrome的V8引擎的JavaScript 运行环境

如何使用Node.js

1.在官网下载Node.js https://nodejs.org/en/,然后在电脑中安装
2.在终端中查看Node.js的版本

node -v

3.新建一个js文件 ,例如:创建了一个myNode.js文件
4.在终端运行

// node js文件名字
node myNode.js

Nodejs中的模块

模块化: 解决一个复杂问题,自顶向下逐层把系统划分为若干模块的过程,模块是可组合,分解和更换的单元。
Node.js遵守了 CommonJS模块规范

CommonJS 规定了模块特性和各模块之间如何相互依赖:

  1. 每个模块内部,module变量代表当前模块
  2. module变量是一个对象,它的exports属性(即module.exports) 是对外的接口
  3. 加载某个模块,其实是加载该模块的module.exports属性,require()方法用于加载模块

模块化的优点

  1. 提高了代码复用性
  2. 提高了代码可维护性
  3. 可以实现按需加载

模块作用域

模块内定义的变量、方法等成员,只能在当前模块内被访问这种限制叫做模块作用域,避免了全局污染

模块的分类

1. 内置模块

加载模块通过require(内置模块名字) 省略.js后缀名

fs文件系统模块

1.加载fs模块

const fs = require('fs')

2.使用fs.readFile读取文件内容

fs.readFile('./01.txt', 'utf8', function(err,data){
    // 失败结果
    console.log(err)
    // 成功结果
    console.log(data)
})

3.使用fs.writeFile写入内容到文件中,会覆盖文件写入前内容

fs.writeFile('./01.txt','这是通过fs写入的文件内容','utf8', function(err){
    // 失败结果
    console.log(err)
})
path模块

提供了一些工具函数,用于处理文件与目录的路径。

fs.readFile('../01.txt', 'utf8', function(err,data){}

./ 或以 …/ 开头为 相对路径,node命令会动态拼接当前相对路径 ,当我们在文件路径的上一层或其他目录运行时,拼接的路径就不正确。
此时就需要使用绝对路径,在项目中不可能写死一个绝对路径,path模块就提供了解决该问题的相关办法。
1.加载模块

const path = require('path')

__dirname 表示当前文件所处的目录
2.使用path.join可以把多个路径拼接在一起

// 可在任何目录执行当前js,都能通过文件目录正确找到
fs.readFile(path.join(__dirname,'./01.txt'), 'utf8', function(err,data){})

注意:拼接../会抵消一个路径
例如 :

path.join('E:\\node\\my\\01.txt','../','./01.txt')
//得到的路径是 E:\node\01.txt

3.使用path.basename获取文件名

const fpath = '/a/a/b/index.html'
const fullname = path.basename(fpath)
console.log(fullname) // index.html
//只获取名字,不要后缀名
const name = path.basename(fpath,'.html')
console.log(name)  //index

3.使用path.extname获取文件名

const lastpath = path.extname('/a/a/b/index.html')
console.log(path.extname(lastpath)) // .html
http模块

1.导入http模块
2.创建web服务器实例
3.为服务器绑定request事件 监听客户端请求
4.启动服务器

//index.js
//启动当前js文件 就可在浏览器通过http://127.0.0.1:80访问
const http =  require('http')
const server = http.createServer()
server.on('request',(req,res)=>{
	//访问一次就会打印一次
    console.log('有人访问')
})
server.listen(80,() => {
    console.log('开启服务 http://127.0.0.1:80')
})

回到调函数(req,res)=>{}中第一个参数req为请求对象,第二个res参数为请求响应对象
可通过req.url获取请求地址,req.method获取请求方式
在上面index.js中,访问http://127.0.0.1:80在node终端会打印,但浏览器中是一个空白页面。
可以通过res.end()向页面返回指定的内容,如果内容包含中文需要设置res.setHeader('Content-Type','text/html; charset=utf-8',)防止乱码。

//部分代码
server.on('request',(req,res)=>{
    const str = `请求的客户端是 ${req.url},method是 ${req.method}`
    console.log(str)
    let content = '<h4>404 Not found</h4>'
    const url = req.url
    if(url === '/' || url === '/index.html') {
        content = '<h4>首页</h4>'
    }else if (url === '/about.html') {
        content = '<h4>关于页面</h4>'
    }
    res.setHeader('Content-Type','text/html; charset=utf-8',)
    res.end(content)
})
//在index.js加入这些代码,访问服务器就会就会得到url在服务器返回的对应内容

在index.js中 server.listen(80,() => {console.log('开启服务http://127.0.0.1:80')})80是端口号,127.0.0.1代表自己的电脑 对应localhost
补充知识点:
1.域名和IP是一一对应关系 存放在域名服务器
2.端口号:一台电脑可以运行多个服务,每个服务对应唯一的端口号

2. 自定义模块

用户创建的每个.js文件都是自定义模块
加载自定义模块使用require(路径加文件名)

3. 第三方模块

第三开发使用需要先下载

npm install 第三方模块名称

加载第三方模块使用require(模块名)

module

module对象存储了和当前模块有关的信息

module.exports 对象 默认为{}

在自定义模块中,可以使用module.exports对象,将模块内的成员共享出去,供外界使用
当使用require()导入时得到的就是module.exports对象

exports对象

exportsmodule.exports 指向同一个对象
永远以module.exports指向的对象为准

模块加载机制

  1. 优先从缓存中加载,模块在第一次加载后会被缓存(意味着多次掉require()不会导致模块代码被多次执行)
  2. 内置模块的加载优先级最高
自定模块加载机制

./ 或../路径标识符开头
如果require自定义模块省略了文件扩展名,按照如下规则:

  1. 按照确切文件明进行加载
  2. 补全.js扩展名进行加载
  3. 不全.json扩展名进行加载
  4. 补全.node扩展名进行加载
  5. 加载失败,终端报错
第三方模块加载机制

没有开头会从当前模块的父目录开始,尝试从/node_modules文件夹中加载第三方模块,没有找到则移动到上一层父目录node_modules直到文件根目录

目录作为模块(require(模块目录))
1.找package.json文件 main属性 作为入口
2.则试图加载index.js文件

npm与包

https://blog.csdn.net/qq_38367703/article/details/126838942?spm=1001.2014.3001.5501

Express

https://blog.csdn.net/qq_38367703/article/details/126856387?spm=1001.2014.3001.5501

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值