Node.js(基础学习)

读写文件内容及小案例
const fs=require('fs')

fs.readFile('./file/0.txt','utf-8',(err,data)=>{//读取文件
    if(err){return console.log('文件读取失败')}
      
    const perArr=data.split(' ')//依据空格分成数组
    const newArr=[]
    perArr.forEach(item=>{
        newArr.push(item.replace(':','='))//对数组遍历,每一项符号进行替换操作
    })
    const str=newArr.join('\r\n')//将数组转化为字符串,用回车+换行符分割
    //这里要用新数组接一下,因为返回的是新数组,原数组不变
    fs.writeFile('./file/1.txt',str,(err)=>{
        if(err){return console.log('文件写入失败')} 

    })
    
})

注:这里有路径问题,直接用绝对路径或者相对路径会出现不方便或路径拼接错误,所以以后路径都可以用:fs.readFile(__dirname+'/file/0.txt','utf-8',(err,data)=>{}

(常用)fs.readFile( path.join(__dirname,'/file/0.txt') , 'utf-8' , (err,data)=>{}

用之前要先引入path模块:const path=require('path')

serve:

IP地址与域名是一一对应的,域名更方便记忆与访问。两者之间是通过DNS进行解析(udp协议)的。在自己电脑上,127.0.0.1对应的域名是localhost.

  • URL:Uniform Resource Locator,统一资源定位符

  • URI:Uniform Resource Identifier,统一资源标志符

URL 是一种比较统一的带参数指向某个地址的格式。格式为:

[协议类型]://[访问资源需要的凭证信息]@[ 服务器地址]:[端口号]/[资源层级UNIX 文件路径][文件名]?[查詢]#[片段ID]

模块化&npm:

模块化一些注意点:

1.这里打印出来的会指向新对象,而不是原来的

2.module.exports&exports的理解,四种应用场景

注:为了避免混乱,,不要同时使用两种暴露方式。。。。。。。。。。。。。。

npm是一个以node内置模块为基础,作为第三方来提供包的包管理工具:node package manager

执行命令:npm init -y 创建package.json文件,这个文件用来记录安装了哪些包和版本号。 多人共同开发的情况下要将node_modules文件放在gitignore中,不要全上传.根据package.json再下载包就可使用。执行此命令的文件名不能出现中文和空格。。

执行命令:npm i 包名 -D / npm i 包名 --save-dev把安装的包记录在devDependencies节点中,只在开发时用到,上线后不用。

执行命令:npm i 包名 -g 全局安装,全局安装的包在文件夹npm-node_modules里可以查看到。

淘宝镜像的两种使用方式:

将md文件转化为html文件的一个包:

在node_modules文件夹下有安装的包的文件,每个包的文件也有package.json文件,里面有写main这个属性,属性内容是入口文件路径,即可开始运行。

模块加载机制:

Express:

res.send():向客户端发送信息

req.query():获取客户端请求参数 req.params():获取客户端动态请求参数

静态资源管理(可以通过路径访问到file文件夹的所有文件):①app.use(express.static('file'))②app.use('./file',express.static('file'))

注:app.use()作用是用来注册全局中间件

第一种写法:访问路径不出现file,如果托管的多个文件夹里有相同的文件名,则按先写的展示。

第二种写法:加一个文件的访问路径前缀,确保访问正确。

安装nodemon:执行命令nodemon 文件名 只要保存就会自动重启,不用手动一直执行命令了。

路由的模块化

const express=require('express')//引入
const app=express()//创建一个实例

app.get('/user',(req,res)=>{})//实际开发中不会像这样直接在express的实例上挂载路由请求
const express=require('express')//引入
const router=express.Router()//创建一个路由模块

router.get('/user',(req,res)=>{})
module.exports=router//暴露出去

///另一文件
const express=require('express')
const app=express()

app.use(router)//放进来
app.listen()

基本中间件:分为全局中间件和局部中间件,注意书写顺序,先中间件再路由,程序是由上到下执行的。

//定义全局中间件
app.use((req,res,next)=>{
    console.log('全局生效')
    req.weight=130
    next()
})
//定义局部中间件,写在要用它的路由里,作为中间的参数
const part1=function(req,res,next){
    console.log('局部生效1')
    next()
}

路由中间件:

错误中间件:

解析请求体(req.body)数据的中间件:

app.use( express.json() )

app.use( express.urlencoded( { extended:false } ) )

解决跨域问题

cross-origin resource sharing(CORS)

const cors=require('cors')
app.use(cors())//利用中间件

设置允许的请求:

跨域的两种请求:简单请求(1次)和预检请求(2次)

jsonp:浏览器通过<script>标签的src属性,请求服务器上的数据时,服务器返回一个函数的调用。这种请求方式叫jsonp请求。

数据库:

在MySQL WorkBench中 查询、 增加 、更新、 删除/ where 、and、 or /count、 as

 select * from my_db_01.users
 select username,password from users -- 两种查询数据方式

insert into users (username,password) values ('tony','989898') --插入数据语句

update users set password='464646' where id=2   --更新某行一列数据
update users set password='282828',status='1' where id=1 --更新某行多列数据

delete from users where id=1 --删除某行数据

-- where子句  and、or运算符

select*from users order by status ASC --'ASC'写不写都行,默认也是按status升序排序
select*from users order by id DESC  --按照id降序排序
select*from users order by status ASC,username DESC --多重排序,先按照status升序,再按照username降序

select count(*) from users where status=0 --查询status为0的数据条数

select count(*) as total from users where status=0--用as给列起别名
select username as una,password as pwo from users

在vs-code项目中安装mysql第三方模块:npm i mysql,与数据库建立联系

cookie:

用于session验证

session:

执行命令:npm i express-session安装session中间件。不跨域的情况推荐使用

JWT:

json web token

执行命令:npm i jsonwebtoken express-jwt安装两个包,第一个包用于生成jwt字符串,第二个是将客户端的jwt字符串解析还原成json对象的包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值