node.js的模块化
一、内置模块(fs, path, http)
二、自定义模块
三、第三方模块
模块作用域:默认情况下,在模块內定义的变量无法被模块以外所访问,这样避免了模块变量之间相互污染。
module
每个模块都有一个dodule对象,而已通过module.exports 去暴露自己,外界可以用require接收所暴露的
exports和mpdule.exports的使用误区
时刻谨记,require()模块时,得到的永远是module.exports指向的对象
a.js
module.export = {
userName: '张三',
age() {
console.log(23)
}
}
b.js
const a = requre('./a')
console.log(a) //{userName: '张三',age}
CommonJS规定:
1.每个模块内部,module 量代表当前模块
2.module 变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口
3.加载某个模块,其实是加载该模块的 module.exports 属性require0 方法用于加载模块.
node.js的内置模块
fs
fs.reFile(路径,可选参数-编码格式,回掉函数)
fs.writeFile(路径,写入的内容,可选参数-编码格式,回掉函数)
const fs = require('fs')
fs.readFile(path,'utf-8',(err, data)=>{
if(err){
return console.log('读取文件失败')
}
})
fs.writeFile(path, '写入文件的内容', 'utf-8', (err)=>{
if(err){
return console.log('写入文件失败')
}
})
path
path.join (路径,路径 ...) 参数可以多个路径参数 //将多个路径拼接起来
path.basename(路径, 文件名后缀) 可以获取一段路径最后的名字
path.extname(路径) 获取一段路径的后缀
const path = require('path')
cosnt pathStr = path.join('/a', '/b/c', './', '/d', '/e')
console.log(pathstr) //pathStr='/a/b/d/e' 拼接路径的时候也可以抵消掉
const fpath = '/a/b/c/index.html'
path.basename(fpath, '.html') //返回值是 index
path.extname(fpath) //返回值是 .html
http(创建一个基础的服务器)
const http = require('http')
//创建服务器
const server = http.creatServe();
//绑定request
server.on('request', (req, res)=>{
//可以拿到请求的url
const url = req.url
//可以拿到请求的方法
const method = req.method
//返回给服务器的内容
let str = '这是需要返回的内容'
//正常返回中文会产生乱码
// 解决返回中文乱码
res.setHeader('Content-Type', 'text/html; charset=utf-8')
res.end(str)
})
//启动服务
server.listen(80,()=>{
console.log('服务启动成功')
})
发布自己的npm包
1.登陆账号 npm login 执行命令后依次输入用户名 , 密码, 邮箱后,就可登录
2.将终端切换到包的根目录 npm publish
删除自己的包
npm unpublish 只能删除72小时以内发布的包--------删除的包在24小时內不允许再发布
模块的加载机制
1.首先从缓存中加载
2.内置模块加载优先级最高
3.require()加载自定义模块的时候必须以'./'或者'../'开头的路径标识符,不然node会把它当做内置模块或者是第三方模块进行加载。
用require引入的时候如果没有写文件名,那node.js会按顺序分别尝试加载文件
顺序:.js>.json>.node 都没找到就终端报错
第三方加载顺序
Express创建服务器
//导入express
const express = require('express')
//创建express服务器
const app = express()
//启动服务器
app.listen(80, (err)=>{
if(err){
return console.log('启动失败')
}
console.log('启动成功')
})
express.static() 托管静态资源
app.use(express.static(指定目录) )
nodemon
不需要重启
中间件
//第一个全局中间件
app.use((req, res, next)=>{
next()
})
//第二个中间件
app.use((req, res, next)=>{
next()
})
//定义一个路由
app.get('/user'(req, res)=>{
})
中间件的注意事项: