前端Nodejs-Day35
创建web服务器:
① 导入http模块:require导入
② 创建web服务器实例:调用http.createServer()方法
③ 为服务器绑定request事件:使用on方法绑定
④ 启动服务器:.listen方法,参数为端口号和回调函数。
const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
console.log('someone visit our web server')
})
server.listen(8080, () => console.log('server running at http://127.0.0.1:8080'))
req请求对象:存储客户端请求的数据和属性。(on函数的参数)
req的url属性存储客户端请求的url地址,method为客户端的请求方式。
const http = require('http')
const server = http.createServer()
// req是请求对象,包含了客户端相关的属性和数据
server.on('request', (req, res) => {
console.log(req.url) // '/'
console.log(req.method) // GET
})
server.listen(8080, () => console.log('server running at http://127.0.0.1:8080'))
res响应对象:存储服务器相关的属性和数据。(通过end方法发送内容,响应给客户端)
解决中文乱码:使用res的setHeader方法设置Content-Type为text/html;charset=utf-8
res.setHeader('Content-Type', 'text/html;charset=utf-8') //解决乱码
根据不同的url响应不同的html内容:
① 获取请求的url地址 ② 设置默认响应内容为404 Not found ③ 判断用户请求 ④ 设置Content-Type响应头防止中文乱码 ⑤ 使用res.end将内容响应给客户端。
const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
const url = req.url
let content = '<h1>404 Not Found</h1>'
if (url === '/' || url === '/index.html') {
content = '<h1>首页</h1>'
} else if (url === '/about.html') {
content = '<h1>关于页面</h1>'
}
res.setHeader('Content-Type', 'text/html;charset=utf-8')
res.end(content)
})
server.listen(8080, () => console.log('http://127.0.0.1:8080'))
模块化:遵守固定规则,将大文件拆分为独立并且相互依赖的多个小模块
好处:提高代码复用性和可维护性,实现了代码的按需加载
Node.js中模块的分类:内置模块、自定义模块、第三方模块
加载模块:require方法
模块作用域:在定义模块的变量和方法只能在当前模块被访问,防止了全局变量的污染。
向外共享模块作用域的成员:
① module对象:每个.js自定义模块都具有的对象,存储了当前模块的各类信息。其中exports属性就是向外共享的重要属性。
② module.exports对象:在自定义模块中,使用module.exports对象,将模块内对象共享。
外界用require导入的模块就是自定义模块的module.exports对象。
使用require导入模块时,永远以module.exports指向的对象为准!即如果自定义模块给module.exports重新指向一个对象,require导入则指向这个新对象。
③ exports对象:默认情况下和module.exports对象指向相同。但最终以module.exports指向为准!
CommonJS规范:
① 每个模块内部module代表当前模块。
② module变量是对象,他的exports属性即module.exports是对外的接口。
③ 加载某个模块,即加载模块的module.exports属性,require用于加载模块。
包:即第三方模块
npm导入包:npm install 包名 / npm i 包名
npm 安装指定版本的包:npm i 包名 @版本号
包的语义化版本规范:
快速创建package.json:npm init -y
dependencies节点:位于package.json文件中,记录了使用npm下载的包的相关信息。
一次性安装所有需要的包:npm install / npm i 会读取package.json中的dependencies节点的包信息进行下载。
卸载包:npm uninstall 包名
devDependencies节点:存储开发时需要的包,而项目上线后不需要的包 npm i 包名 -D
切换npm下包镜像源:
nrm:切换镜像的命令工具
nrm ls:获取所有镜像源。nrm use 镜像名:切换镜像
包的分类:
1.下载包:被安装到项目的node_modules目录的包分为:① 项目依赖包(在devdependencies节点的包,只在开发使用:npm i 包名)② 核心依赖包(记录到dependencies节点的包,在开发和项目上线时都会使用:npm i 包名 -D)
2.全局包:执行npm -i时提供-g安装的包,只有工具性质的包才需要进行全局安装。
规范的包结构: