概念:
一个运行平台,内置了很多的模块可以使用
fs--文件系统模块
步骤:
- 引入模块--require
读取:fs.readFile()
语法:
fs.readFile(path[,option],callback)
注意:
- path:必填 文件路径
- option:可选参数,编码格式 默认是utf-8
- callback:必填 回调函数 ---有两个参数(错误信息,文件内容
写入:fs.writeFile()
语法:
fs.writeFile(path,value[,option],callback)
解决覆盖问题:
const fs=require('fs')
fs.writeFile('./文件.txt','天',{flag:'a'},function(err){
if (err) {
console.log("写入失败");
}else{
console.log("写入成功");
}
})
fs.appendFile('./文件.txt','123',function(){
})
path路径模块
path.join()--拼接路径,可以将多个路径片段拼接到一起
语法:
path.join(路径1,路径2,路径3)
const path=require('path')
const fs=require('fs')
let a='/bg/cw/w/w'
let b='w/w/v'
let pa=path.join(__dirname,'/文件.txt')
console.log(pa);
path.basename()---获取当前路径中的文件名
语法:
path.basename(路径,扩展名)
console.log(path.basename(pa,'.txt'));
path.extname()---获取当前路径中的文件的扩展名
console.log(path.extname(pa));
http模块
可以快速的创建一个web服务器
步骤:
-
导入内置模块http
-
创建web服务器
-
监听request请求
-
监听端口
const http=require('http')
const server=http.createServer()
server.on('request',function(req,res){
console.log('我被请求了');
})
server.listen('8080',function(){
console.log('http://127.0.0.1:8080');
})
req, res
req---有关客户端的数据信息,请求对象
res----关于响应的信息,响应对象
req.url:请求路径
req.method:请求方式
res.end:响应页面
const http=require('http')const server=http.createServer()
server.on('request',function(req,res){
// 解决中文乱码的问题
res.setHeader('content-type','text/html;charset=utf-8')
res.end("张三")})s
erver.listen('8080',function(){
console.log('http://127.0.0.1:8080/');
})
根据不同url显示不同的内容
-
创建web服务器
-
获取不同url,根据url的类型显示当前页面的内容
-
res.end()
-
不正确:404 not Found
const http=require('http')
const server=http.createServer()
server.on('request',function(req,res){
res.setHeader('content-type','text/html;charset=utf-8')
var content=''
if (req.url==='/'||req.url==='index') {
content='<h1>首页</h1>'
}else if(req.url==='/user'){
content='<h1>用户</h1>'
}else{
content='<h1>404 Not Found</h1>'
}
res.end(content)
// 解决中文乱码的问题
// res.setHeader('content-type','text/html;charset=utf-8')
// res.end("张三")
})
server.listen('8080',function(){
console.log('http://127.0.0.1:8080/');
})
模块化:
node中的功能都是模块式的,每一个单独js文件就是一个模块
模块分类:
内置模块(fs path http querystring)
自定义模块(你自己定义模块)
第三方模块(包)
优点:
-
可以实现按需加载
-
提高了代码的可维护性
-
降低了代码之间的耦合性
-
可读性强
引入模块:require
mudule:存放当前文件的相关信息
暴露成员:module.exports 或者 exports 两者不能同时使用,同时使用以module.exports暴露优先
a.js
var b=10
console.log(module);
module.exports.b=b
exports.b=b
console.log(module.exports===exports);
b,js
var a=require('./a')
var b=20
console.log(a.b);
包
分类:
安装方式的不同:全局包(所以项目都可以使用)和项目包(只有当前的项目可用)
按需导入:开发包和依赖包
需要使用npm安装再引入才可以使用的包:第三方的包(程序员可以自己写包,发布到第三方)
包的安装:npm install 包名 -D/ -g
包卸载:npm uninstall 包名、
包的规范:
-
入口文件 index.js
-
package.json --包的配置
-
REAFME.md---包的说明文档
express
创建一个服务器
步骤:
-
引入express模块
-
创建express实例
-
监听端口启动服务
监听请求分类:
语法:
app.请求方式(请求url路径,回调函数)
get请求:
app.get('/',(req,res)=>{
console.log(req.method);
})
post请求:
app.post('/',(req,res)=>{
console.log(req.method);
})
向客户端传递数据 res.send()
res.send({"name":"zhangsan"})
静态参数
url路径后面?拼接的数据
动态参数
在url路径中用冒号的方式绑定数据可以动态获取参
访问静态资源
express.static('public)
将静态的数据存放到publiic文件夹下,将文件夹注册
const exp=require('express')
const app=exp()
app.use(exp.static('public'))
app.listen("8080",function(){
console.log("http://127.0.0.1:8080");
})
路由
路由是一种映射关系,必须包含三部分:请求方式,请求路径,处理函数
app.get('/',function(){
console.log(1);
})
app.post('/',()=>{})
app.put('/',()=>{})
app.delete('/',()=>{})
路由匹配规则:
匹配请求方式和路径,两者全部匹配就会调用后面的回调函数
路由前缀:
可以规定访问路由前使用什么前缀
app.use('/api',routher.routher)
路由的模块化:
//express。js
const exp=require('express')
const routher=require('./路由')
const app=exp()
app.use(routher.routher)
app.listen("8080",function(){
console.log("http://127.0.0.1:8080");
})
//路由。js
const express=require("express")
const routher=express.Router()
routher.get('/',function(){
console.log("get");
})
routher.post('/',(req,res)=>{
console.log("post");
})
module.exports.routher=routher