node.js笔记

目录

读取文件内容

判断文件是否读取成功

 写入文件内容

 判断文件是否写入成功

整理成绩案例

处理路径问题

使用pash模块处理路径

获取路径文件名

获取路径中的文件扩展名

分别处理CSS,JS,HTML

创建最基本的web服务器

req的请求数据

 res响应对象

 解决中文乱码问题

根据不同的url响应不同的html内容

使用Express创建一个服务器

使用Express发起GET请求和POST请求

 获取URL中携带的查询参数

  获取URL中的动态参数

托管静态资源 

挂载路径前缀

 路由最简单的用法

 路由的模块化

 为路由模块添加前缀

定义一个全局生效的中间件

简化版中间件

中间件的作用

 定义多个全局生效的中间件

 局部生效的中间件

同时使用多个局部生效的中间件

编写GET接口

 编写POST接口


读取文件内容

判断文件是否读取成功

 写入文件内容

 判断文件是否写入成功

整理成绩案例

const fs = require('fs')
fs.readFile('./1.txt','utf8',function(err,dataStr){
    if (err) {
        console.log('文件读取失败!'+err.message);
    }
    
    const arrStr = dataStr.split(' ')
    console.log(arrStr);

    const arrNew = [];
    arrStr.forEach(item=>{
        arrNew.push(item.replace('=',': '))
    })
    console.log(arrNew);
    var newStr = arrNew.join('\r\n')
    console.log(newStr);

    fs.writeFile('./3cl.txt',newStr,function(err){
        if (err) {
            console.log('文件写入失败!'+err.message);
        }
        console.log('成绩写入成功');
    })
    
})

处理路径问题

使用pash模块处理路径

获取路径文件名

获取路径中的文件扩展名

分别处理CSS,JS,HTML

//1.1定义fs模块
const fs = require('fs')
const { join, resolve } = require('path')
//1.2定义path模块
const path = require('path')
//1.3定义正则表达式分别匹配<style></style>和<script></script>标签
const regStyle = /<style>[\s\S]*<\/style>/
const regScript = /<script>[\s\S]*<\/script>/

//2.1读取需要被处理的HTML文件
fs.readFile(path.join(__dirname+'/christmasTrees.html'),'utf8',function(err,dataStr){
//2.2读取文件失败    
    if (err) {
        console.log('读取文件失败!'+err.message);
    }
//2.3读取HTML文件成功后,调用对应的方法,拆解出css、js 和 html 文件
resolveCSS(dataStr)
resolveJS(dataStr)
resolveHTML(dataStr)
/* resolveHTML(dataStr) */
})
//3.1定义处理css样式的方法
function resolveCSS(htmlStr) {
    //3.2使用正则提取需要的内容
    const r1 = regStyle.exec(htmlStr)
    console.log(r1);
    //3.3将提取出来的样式字符串,进行字符串的replace替换操作
    const newCSS = r1[0].replace('<style>','').replace('</style>','')
    console.log(newCSS);
    //3.4调用方法将提取的样式,写入到 clock目录中index.css的文件里面
    fs.writeFile(path.join(__dirname+'/clock/index.css'),newCSS,function(err){
        if (err) return console.log('写入CSS样式失败!'+err.message);
        console.log('写入样式文件成功');
    })
}
//4.1处理js脚本
function resolveJS(htmlStr) {
    //4.2使用正则提取需要的内容
    const r2 = regScript.exec(htmlStr)
    console.log(r2);
    //4.3将提取出来的脚本字符串,进行字符串的replace替换操作
    const newJS = r2[0].replace('<script>','').replace('</script>','')
    console.log(newJS);
    //4.4调用方法将提取的js脚本,写入到 clock目录中index.js的文件里面
    fs.writeFile(path.join(__dirname+'/clock/index.js'),newJS,function(err){
        if (err) return console.log('写入JavaScript失败!'+err.message);
        console.log('写入JS脚本成功');
    }) 
}
//5.1定义处理HTML结构的方法
function resolveHTML(htmlStr){
    //5.2将字符串调用replace方法,把内嵌的style和script标签,替换为外联的link和script标签
     const newHTML = htmlStr.replace(regStyle,'<link rel="stylesheet" href="../clock/index.css">').replace(regScript,'<script src="../clock/index.js"></script>')
    //5.3写入HTML文件
    fs.writeFile(path.join(__dirname+'/clock/index.html'),newHTML,function(err){
        if (err) return console.log('写入html页面失败!'+err.message);
        console.log("写入html页面成功");
    })
}

创建最基本的web服务器

//1.导入http模块
const http = require('http')
//2.创建web服务器示例
const server = http.createServer()
//3.为服务器示例绑定request事件 监听客户端请求
server.on('request',(req,res)=>{
    console.log('Someone visit our web server');
})
//4.启动服务器
server.listen(8080,()=>{
    console.log('http server running at http://127.0.0.1:8080');
})

req的请求数据

//1.导入http模块
const http = require('http')
//2.创建web服务器示例
const server = http.createServer()
//3.为服务器示例绑定request事件 监听客户端请求
//req是请求对象 包含了与客户的相关的数据和属性
server.on('request', (req) => {
    //req.url是客户端请求的url地址
    const url = req.url
    //req.method是客户端请求的method类型
    const method = req.method
    const str = `Your request url is ${url},and request method is ${method}`
    console.log(str);
})
//4.启动服务器
server.listen(80, () => {
    console.log('http server running at http://127.0.0.1');
})

 res响应对象

 解决中文乱码问题

 

//1.导入http模块
const http = require('http')
//2.创建web服务器示例
const server = http.createServer()
//3.为服务器示例绑定request事件 监听客户端请求
//req是请求对象 包含了与客户的相关的数据和属性
server.on('request', (req,res) => {
    //req.url是客户端请求的url地址
    const url = req.url
    //req.method是客户端请求的method类型
    const method = req.method
    const str = `你请求的url地址是 ${url},请求的method类型为 ${method}`
    console.log(str);
    //调用res.setHeader()方法来解决中午乱码问题
    res.setHeader('Content-Type','text/html;charset=utf-8')
    //调用res.end()方法,向客户端相应一些内容
    res.end(str)
})
//4.启动服务器
server.listen(80, () => {
    console.log('http server running at http://127.0.0.1');
})

根据不同的url响应不同的html内容

//1.导入http模块
const http = require('http')
//2.创建web服务器示例
const server = http.createServer()
//3.为服务器示例绑定request事件 监听客户端请求
//req是请求对象 包含了与客户的相关的数据和属性
server.on('request', (req,res) => {
//1.获取请求的url地址
const url = req.url
//2.设置默认的响应内容为404 Not found
let content = '<h1>404 Not found!</h1>'
//3.判断用户请求的是否为/或/index.html首页
//4.判断用户请求的是否为/about.html 关于页面
if (url==='/'||url==='/index.html') {
    content = '<h1>首页</h1>'
}else if (url==='/about.html') {
    content = '<h1>关于页面</h1>'
}
//5.设置 Content-Type响应头,防止中文乱码
res.setHeader('Content-Type','text/html;charset=utf-8')
//6.使用res.end()把内容响应给客户端
res.end(content)
})
//4.启动服务器
server.listen(80, () => {
    console.log('http server running at http://127.0.0.1');
})

使用Express创建一个服务器

//1.导入express
const express = require('express')
//2.创建web服务器
const app = express()
//3.调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80,()=>{
    console.log('express server running at http://127.0.0.1');
})

使用Express发起GET请求和POST请求

//1.导入express
const express = require('express')
//2.创建web服务器
const app = express()
//4.监听客户端的GET和 POST请求,并向客户端响应具体的内容
app.get('/user',(req,res)=>{
    //调用express提供的res.send()方法,向客户端响应一个 JSON 对象
    res.send({name:'zs',age:30,gender:'男'})
})
app.post('/user',(req,res)=>{
    //调用express提供的res.send()方法,向客户端响应一个 文本字符串
    res.send('请求成功')
})
//3.调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80,()=>{
    console.log('express server running at http://127.0.0.1');
})

 

 获取URL中携带的查询参数

//1.导入express
const express = require('express')
//2.创建web服务器
const app = express()

//3.调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80,()=>{
    console.log('express server running at http://127.0.0.1');
})
app.get('/',(req,res)=>{
    //通过 req. query可以获取到客户端发送过来的查询参数
    //注意:默认情况下,req.query是一个空对象
    console.log(req.query)
    res.send(req.query)
})

  获取URL中的动态参数

app.get('/user/:id',(req,res)=>{
    //req.params对象是动态匹配到的URL参数 默认是一个空对象
    console.log(req.params)
    res.send(req.params)
})

托管静态资源 

express提供了一个非常好用的函数,叫做express.static),通过它我们可以非常方便地创建一个静态资源服务器,例如,通过如下代码就可以将public目录下的图片、CSS文件、JavaScript 文件对外开放访问了:

const express = require('express')
const app = express()

app.use(express.static('../clock'))

app.listen(80,()=>{
    console.log('express server running at http://127.0.0.1');
})

挂载路径前缀

const express = require('express')
const app = express()

app.use('/public',express.static('../clock'))

app.listen(80,()=>{
    console.log('express server running at http://127.0.0.1');
})

可以通过带有/public 前缀地址来访问public目录中的文件了:

http://127.0.0.1/publick/index.html

http://127.0.0.1/publick/index.css

http://127.0.0.1/publick/index.js

 路由最简单的用法

const express = require('express')
const app = express()

app.get('/',(req,res)=>{
    res.send('hello world')
})

app.post('/',(req,res)=>{
    res.send('POST REQUEST')
})

app.listen(80,()=>{
    console.log('express server running at http://127.0.0.1');
})

 路由的模块化

const express = require('express')
const app = express() 
//导入路由模块
const router = require('./test')
//注册路由模块
app.use(router)
app.listen(80,()=>{
    console.log('http://127.0.0.1');
})
  
//1.导入express
const express = require('express')
const app = express() 
//2.创建路由对象
const router = express.Router()
//3.挂载获取用户列表的路由
router.get('/user/list',(req,res)=>{
    res.send('Get user list')
})
//4.挂载添加用户的路由
router.post('/user/add',(req,res)=>{
    res.send('Add new user')
})

//5.向外导出路由对
module.exports = router
 

 为路由模块添加前缀

const express = require('express')
const app = express() 
//导入路由模块
const router = require('./test')
//注册路由模块
app.use('/api',router)
app.listen(80,()=>{
    console.log('http://127.0.0.1');
})

定义一个全局生效的中间件

const express = require('express')
const app = express()
//定义一个中间件函数
const mw = function (req,res,next) {
    console.log('这是一个中间件函数');
    //把流转关系转交给下一个中间件或路由
    next()
}
//将mw注册为全局生效的中间件
app.use(mw)

app.get('/',(req,res)=>{
    res.send('Home page')
})

app.get('/user',(req,res)=>{
    res.send('User page')
})

app.listen(80,()=>{
    console.log('http://127.0.0.1');
})

简化版中间件

const express = require('express')
const app = express()
 //定义一个简化中间件函数
app.use((req,res,next)=>{
    console.log('这是一个中间件函数');
    next()
})

app.get('/',(req,res)=>{
    res.send('Home page')
})

app.get('/user',(req,res)=>{
    res.send('User page')
})

app.listen(80,()=>{
    console.log('http://127.0.0.1');
})

中间件的作用

const express = require('express')
const app = express()
 //定义一个简化中间件函数
app.use((req,res,next)=>{
    //获取到请求到达服务器的时间
    const time = Date.now()
    //为req对象,挂载自定义属性,从而把时间共享给后面的所有路由
    req.startTime = time
    next()
})

app.get('/',(req,res)=>{
    res.send('Home page'+req.startTime)
})

app.get('/user',(req,res)=>{
    res.send('User page'+req.startTime)
    
})

app.listen(80,()=>{
    console.log('http://127.0.0.1');
})

 

 定义多个全局生效的中间件

const express = require('express')
const app = express()
//定义第一个全局中间件
app.use((req,res,next)=>{
    console.log('调用了第一个全局中间件');
    next()
})
//定义第二个全局中间件
app.use((req,res,next)=>{
    console.log('调用了第一个全局中间件');
    next()
})
//定义一个路由
app.get('/user',(req,res)=>{
    res.send('User page')
})
app.listen(80,()=>{
    console.log('http://127.0.0.1');
})

 局部生效的中间件

//导入express
const express = require('express')
//创建express的服务器实例
const app = express() 

//定义中间件函数
const mw1 = (req,res,next)=>{
    console.log('调用了局部生效的中间件');
    next()
}
//创建路由
app.get('/',mw1,(req,res)=>{
    res.send('Home page')
})
app.get('/user',(req,res)=>{
    res.send('User page')
})

//启动服务器
app.listen(80,()=>{
    console.log('http://127.0.0.1');
})

同时使用多个局部生效的中间件

//导入express
const express = require('express')
//创建express的服务器实例
const app = express() 

//定义中间件函数
const mw1 = (req,res,next)=>{
    console.log('调用了第一个局部生效的中间件');
    next()
}
//定义第二个中间件函数
const mw2 = (req,res,next)=>{
    console.log('调用了第二个局部生效的中间件');
    next()
}
//创建理由
app.get('/',mw1,mw2,(req,res)=>{
    res.send('Home page')
})
app.get('/user',(req,res)=>{
    res.send('User page')
})

//启动服务器
app.listen(80,()=>{
    console.log('http://127.0.0.1');
})

编写GET接口

const express = require('express')
const app = express()
const  router = require('./ly')

app.use('/api',router)

app.listen(80, () => {
    console.log(`Express server running at http://127.0.0.1`)
})
const express = require('express')
const router = express.Router()

router.get('/get',(req,res)=>{
    const query = req.query
    res.send({
        status:0,
        msg:'GET请求成功!',
        data:query
    })
})

module.exports = router

 编写POST接口

const express = require('express')
const router = express.Router()


router.post('/post',(req,res)=>{
    const body = req.body
    res.send({
        status:0,
        msg:'POST请求响应成功!',
        data:body
    })
})

module.exports = router

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值