node.js学习(未完)

目录

目录

一.使用node.js运行js代码

二.fs文件模块

2.1 读取文件内容 

2.2 fs写入文件内容

2.3 fs读取写入文件的案例

2.4 fs模块路径动态拼接

三.path路径模块 

3.1 路径拼接

3.2获取路径中的文件名

3.3 获取路径中的文件扩展名

四.http模块 

4.1 创建基本的web服务器 

4.2 根据不同的url相应不同的html内容

五.模块化

5.1 分类

5.2 加载模块

5.3 模块作用域

5.4 向外共享模块作用域中的成员

5.5 exports对象 

六.express

6.1 express是什么

6.2 express的基本使用

6.2.1 创建基本的web服务器

6.2.2 监听get请求  监听post请求  把内容响应给客户端

6.2.3 获取url中携带的查询参数

6.2.4 获取url中的动态参数

6.3 托管静态资源

6.4 nodemon

6.5 express路由

6.5.1 模块化路由

6.5.2 express中间件


一.使用node.js运行js代码

二.fs文件模块

2.1 读取文件内容 

2.2 fs写入文件内容

2.3 fs读取写入文件的案例

2.4 fs模块路径动态拼接

三.path路径模块 

3.1 路径拼接

3.2获取路径中的文件名

3.3 获取路径中的文件扩展名

四.http模块 

4.1 创建基本的web服务器 

4.2 根据不同的url相应不同的html内容

五.模块化

5.1 分类

5.2 加载模块

5.3 模块作用域

5.4 向外共享模块作用域中的成员

5.5 exports对象 

六.express

6.1 express是什么

6.2 express的基本使用

6.2.1 创建基本的web服务器

6.2.2 监听get请求  监听post请求  把内容响应给客户端

6.2.3 获取url中携带的查询参数

6.2.4 获取url中的动态参数


一.使用node.js运行js代码

        使用到了powershell窗口打开终端,由于window10自带powershell,故这里放一个链接方便shift+右击打开。windows10开启shift+右键在此处打开命令窗口 - 知乎 (zhihu.com)

       这里放一些终端中的快捷操作:

二.fs文件模块

2.1 读取文件内容 

//1.导入fs模块
const fs = require('fs')
//2.调用fs.readFile()方法读取文件
fs.readFile('./files/1.txt','utf8',function(err,dataStr){
    console.log(err)
    console.log('-----------------------')
    console.log(dataStr)
    if(err)
    {
        console.log('文件读取失败'+err.message)
    }
    else
    {
        console.log('文件读取成功'+dataStr)
    }
})

2.2 fs写入文件内容

const fs = require('fs')

fs.writeFile('./files/12.txt','现在我好伤心',function(err){
    //如果文件写入出成功,则err为空
    console.log(err)
    if(err)
    {
        console.log('fail'+err.message)
    }
    else
    {
        console.log('success')
    }
})

2.3 fs读取写入文件的案例

const fs=require('fs')

fs.readFile('./files/1.txt','utf8',function(err,dataStr){
    if(err){
        console.log('文件读取失败'+err.message)
    }
    else{
        console.log('文件读取成功'+dataStr)
    }
    //把成绩的数据按照空格进行分割
    const arrOld=dataStr.split(' ')//拆分字符串 通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)
    console.log(arrOld)

    const arrNew=[]
    arrOld.forEach(item =>{
        arrNew.push(item.replace('=',':'))
    })

    console.log(arrNew)

    const newStr=arrNew.join('\r\n')//回车换行
    console.log(newStr)

    fs.writeFile('./files/1.txt',newStr,function(err){
        if(err){
            console.log('文件写入失败'+err.message)
        }
        else{
            console.log('文件写入成功')
        }
    })
})

2.4 fs模块路径动态拼接

const fs=require('fs')
//这里路径要用\\双斜线
fs.readFile('D:\\福建工程学院\\--------------------------前端学习代码\\前端学习\\code\\06_nodejs\\files\\1.txt','utf8',function(err,dataStr){
    if(err)
    {
        return console.log('fail'+err.message)
    }
    else{
        return console.log('successs\n',dataStr)
    }
})

三.path路径模块 

3.1 路径拼接

        path.join()可以把多个路径片段拼接为完整的路径字符串

        格式:path.join([...paths])          ../会抵消路径

//导入path模块
const path=require('path')
const fs=require('fs')
//路径拼接 一个../会把前面的一个路径抵消掉
const pathStr= path.join('/a','/b','../','/c/d')
console.log(pathStr) //输出\a\c\d
//__dirname 总是指向被执行 js 文件的绝对路径
fs.readFile(path.join(__dirname,'./files/1.txt'),'utf8',function(err,dataStr)
{
    if(err)
    {
        console.log('error'+err.message)
    }
    else{
        console.log('success\r\n'+dataStr)
    }
})

3.2获取路径中的文件名

//导入path模块
const path = require('path')

//定义文件的存放路径
const fpath='/a/b/c/index.html'
//获取文件名
const fullname=path.basename(fpath)
console.log(fullname)
//除去拓展名
const nameWithoutExt = path.basename(fpath, '.html')
console.log(nameWithoutExt)

3.3 获取路径中的文件扩展名

const path=require('path')
//这是文件的存放路径
const fpath='/a/b/c/index.html'
//获取路径的拓展名
const fnext = path.extname(fpath)
console.log(fnext)

四.http模块 

node.js里面的http模块是官方提供的用来创建web服务器的模块。

4.1 创建基本的web服务器 

//导入http模块
const http=require('http')
//创建web服务器实例
const sever=http.createServer()
//为服务器实例绑定request事件,监听客户端的请求
// sever.on('request',(function(req,res){
//     console.log('有人正在访问服务器')
    
// })
//req请求对象
// sever.on('request',(req) =>{
//     //req.url 是客户端请求的URL地址
//     const url=req.url
//     //req.method是客户端请求的method请求
//     const method=req.method
//     console.log('url:'+url+' method:'+method)
// })
//res响应对象
sever.on('request',(req,res)=>{
    console.log('有人正在访问服务器')
    //req.url 是客户端请求的URL地址
    const url=req.url
    //req.method是客户端请求的method请求
    const method=req.method

    //解决中文乱码
    res.setHeader('Content-Type','text/html; charset=utf-8')
    //调用res.end()方法,向客户端相应一些内容
    res.end('hahhahahhahahha哈哈哈哈哈哈哈哈哈哈哈')
})
//启动服务器
sever.listen(8080,function(){
    console.log('sever runing at http://127.0.0.1:8080')
})

4.2 根据不同的url相应不同的html内容

const http = require('http')
const server=http.createServer()//创建服务器

server.on('request',(req,res)=>{
    const url =req.url //获取请求的url地址
    let content = '404 not found!'
    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()方法,向客户端相应一些内容
      res.end('试一试'+content)

})

server.listen(80,()=>{
    console.log('sever running at http://127.0.0.1')//服务器启动监听
})

五.模块化

5.1 分类

  • 内置模块:由Node.js官方提供,如fs,path,http等
  • 自定义模块:用户创建的每个.js文件
  • 第三方模块:由第三方开发出来的模块,不是前面两种,使用前需要先下载

5.2 加载模块

require()加载

方法类似如

内置模块const fs = require('fs')   自定义模块const  custom = require('./custom.js')  ./custom.js是路径 会执行custom.js里面的代码

5.3 模块作用域

定义:在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制叫做模块作用域

5.4 向外共享模块作用域中的成员

module对象:在每个.js自定义模块中都有一个module对象,它里面存储了和当前模块有关的信息

module.exports对象:在自定义模块中,可以使用module.exports对象,将模块内的成员共享出去,供外界使用。   在默认情况下,module.exports ={ }

5.5 exports对象 

 exports和module.exports指向同一个对象,最终共享的结果还是以module.exports指向的对象为准。  使用require()模块时得到的永远是module.exports指向的对象。

六.express

6.1 express是什么

 express的作用和Node.js内置的http模块类似,是专门用来创建Web服务器的。本质是一个npm包。

安装  在项目所处目录中运行终端命令  npm i express@4.17.1  指定版本号 即可将express安装到项目中使用

6.2 express的基本使用

6.2.1 创建基本的web服务器

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

6.2.2 监听get请求  监听post请求  把内容响应给客户端

app.get()方法 可以监听客户端的get请求

app.post()方法 可以监听客户端的post请求

res.send  把内容响应给客户端

//导入express

const express=require('express')

//创建web服务器

const app=express()

//监听客户端的get和post请求,并向客户端响应具体的内容

//req 请求对象     res 响应对象     /user接口地址

//GET请求一般用去请求获取数据,

app.get('/user',(req,res)=>{

    res.send({name:'zs',age:20,gender:'男'})

})

//POST一般作为发送数据到后台时使用

app.post('/user',(req,res)=>{

    //调用express 提供的res.send()方法,向客户端响应一个文本字符串

    res.send('请求成功')

})



//调用app.listen(端口号,启动成功后的回调函数),启动服务器

app.listen(80,()=>{

    console.log('express sever running at http://127.0.0.1')

6.2.3 获取url中携带的查询参数

//获取url中携带的查询参数
app.get('/',(req,res)=>{
    //通过req.query可以获取到客户端发送过来的 查询参数
    //在默认情况下,req.query是一个空对象
    console.log(req.query)
    res.send(req.query)
})

6.2.4 获取url中的动态参数

//获取url中的动态参数 客户端传的数是多少输出就是多少
//http://127.0.0.1/user/1
app.get('/user/:id',(req,res)=>{
    //req.params默认是一个空对象
    //里面存放着通过 : 动态匹配到的参数
    console.log(req.params)
    res.send(req.params)
})



//多个动态参数
//获取url中的动态参数 传的数是多少输出就是多少
//http://127.0.0.1/user/2/djl
app.get('/user/:id/:name',(req,res)=>{
    //req.params默认是一个空对象
    //里面存放着通过 : 动态匹配到的参数
    console.log(req.params)
    res.send(req.params)
})

6.3 托管静态资源

express.static()

express在指定的静态目录下查找文件,并对外提供资源的访问路径。因此,存放静态文件的目录名不会出现在URL中。    app.use(express.static(' 指定目录'))

6.4 nodemon

使用nodemon可以监听项目文件的变动,当代码被修改后,nodemon会自动重启项目避免了频繁开关项目

安装:win+R打开终端 输入

node install -g nodemon

使用:nodemon +项目   即 node app.js 更改为 nodemon app.js

6.5 express路由

在express中,路由指的是客户端的请求与服务器处理函数之间的映射关系。

  • 路由:由请求的类型、请求的URL地址、处理函数三部分组成
  • 格式:app.method(path,handler)
  • 路由匹配的注意点:
    1. 按照定义的先后顺序进行匹配
    2. 请求类型和请求的URL同时匹配成功才会调用对应的处理函数 

6.5.1 模块化路由

将路由抽离为单独的模块。

将路由抽离为单独模块的步骤如下:

  • 创建路由模块对应的.js文件
  • 调用express.Router()函数创建路由对象
  • 向路由对象上挂载具体的路由
  • 使用module.exports向外共享路由对象
  • 使用app.use()函数注册路由模块

单独模块代码

//导入express
const express =require('express')
//创建路由对象
const router =express.Router()
//挂载具体的路由
router.get('/user/list',(req,res)=>{
    res.send('Get user list.')
})

router.post('/user/add',(req,res)=>{
    res.send('Add new user.')
})

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

引用模块代码

//导入express
const express=require('express')
//创建路由对象
const  app=express()

//导入路由模块
const router=require('./16.router')
//注册路由模块   app.use()的作用是用来注册中间件
app.use(router)

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

6.5.2 express中间件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿隆要成大牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值