文件的读取、写入、追加
//读取
var fs=require('fs')
fs.readFile('./a.txt','utf8',(err,data)=>{//读取文件的内容,接收3个参数,文件路径,解析字符串,回调函数(接收2个参数,一个失败,一个成功)
console.log(err)
console.log(data)
})
//写入
var fs=require('fs')
fs.writeFile('./a.txt','写入',(err)=>{//写入内容,接收3个参数,文件路径,解析字符串,回调(一个参数,失败回调),会清空之前存在的内容
console.log(err)
})
//追加
var fs=require('fs')
fs.readFile('./a.txt','utf8',(err,data)=>{
if(!err){
fs.writeFile('./a.txt',data,(err)=>{
if(!err){
console.log('追加成功')
}
}
)
})
导出配置
//创建package.json
{
"type": "module"
}
//或者把.js改为.mjs
http模块简单实例
var http=require('http')
var server=http.createServer()//创建服务器,实是获取服务器的实例对象
server.listen(8080,()=>{//监听端口,接收2个参数,一个端口号,一个回调函数,成功回调
console.log('http://127.0.0.1:8080')
})
server.on('request',(req,res)=>{//监听客户端,接收2个参数,一个请求信息,一个响应信息
console.log('66')
res.write('8888')//响应写入信息
res.end()//响应断开
})
//插件,npm install -g nodemon修改代码自动更新
根据不同的信息响应不同的内容
var http = require('http')
var fs = require('fs')
var url=require('url')//解析路由的参数
var server = http.createServer()/
server.listen(8080, () => {
console.log('http://127.0.0.1:8080')
})
server.on('request', (req, res) => {
console.log(req.method)//判断请求方法
if (req.method == 'GET') {
console.log(url.parse(req.url,true))//解析参数,第一个参数是路由,第二个参数是否解析参数
if (req.url == '/') {//判断请求的信息,响应不同信息
fs.readFile('./index.html', 'utf-8', (err, data) => {//先读取后响应
res.write(data)
res.end()
})
} else {
fs.readFile('./jhs.png', (err, data) => {
res.end(data)
})
}
}
})
常见的数据请求
方法 | 说明 |
---|---|
GET | 获取服务器资源 |
POST | 向服务器提交数据 |
PUT | 向服务器写入资源,如果已存在则进行替换 |
DELETE | 删除资源 |
HEAD | 获取服务器响应首部 |
OPTIONS | 询问服务器所支持的请求方法 |
HTTP响应状态码
状态码 | 含义 |
---|---|
1xx | 信息性 |
2xx | 成功 |
3xx | 重定向 |
4xx | 客户端错误 |
5xx | 服务的错误 |
(安装express:npm i express)
express框架简单读取用户信息
const express = require('express')
const fs = require('fs')
const { promisify } = require('util')//使用该方法把回调函数转换成async await
const readFile = promisify(fs.readFile)//读取内容
const app = express()
app.get('/', async (req, res) => {
try {
let back = await readFile('./dg.json', 'utf8')
res.send(JSON.parse(back))
} catch (err) {
res.status(500).json({ err })//返回的状态码(status),json注释
}
})
app.listen(3000, () => {//监听3000端口
console.log('http://127.0.0.1:3000')
})
express框架简单添加用户
const express = require('express')
const fs = require('fs')
const { promisify } = require('util')//使用该方法把回调函数转换成async await
const readFile = promisify(fs.readFile)
const writeFile = promisify(fs.writeFile)
const app = express()
app.use(express.json())//接收json格式的信息
// app.use(express.urlencoded())//请求头为application /x-www-form-urlencoded的数据
app.post('/', async (req, res) => {
// req.headers//请求头信息
// req.body//请求的内容
// console.log(req.headers)
console.log(req.body)
let body = req.body
if (!body) {
res.status(403).json({ error: '缺少用户信息' })
}
let back = await readFile('./dg.json', 'utf8')
body.id =JSON.parse(back).users[JSON.parse(back).users.length-1].id + 1
let data = JSON.parse(back).users
data.push(body)
try {
let w =await writeFile('./dg.json',JSON.stringify(data))
if (!w) {
res.status(200).json({ error: '写入成功' })
}
} catch (err) {
res.status(403).json({ error: '写入失败' })
}
})
app.listen(3000, () => {
console.log('http://127.0.0.1:3000')
})
express框架简单修改用户信息
const express = require('express')
const fs = require('fs')
const { promisify } = require('util')//使用该方法把回调函数转换成async await
const readFile = promisify(fs.readFile)
const writeFile = promisify(fs.writeFile)
const app = express()
app.use(express.json())//接收json格式的信息
// app.use(express.urlencoded())//请求头为application /x-www-form-urlencoded的数据
app.put('/:id',async (req,res)=>{
//console.log(req.params.id)获取参数
try{
let userInfo=await readFile('./dg.json','utf8')
let data=JSON.parse(userInfo)
let userid=Number.parseInt(req.params.id)
let user=data.find(item=>item.id==userid)
if(!user){
res.status(403).json({error:'用户不存在'})
}
const body=req.body
console.log(body)
user.name=body.name?body.name:user.name
user.age=body.age?body.age:user.age
data[userid-1]=user
let r=await writeFile('./dg.json',JSON.stringify(data))
if(!r){
res.status(200).json({ error: '修改成功' })
}else {
res.status(400).json({error:'失败'+r})
}
}catch(err){
res.status(501).json({q:err})
}
})
app.listen(3000, () => {
console.log('http://127.0.0.1:3000')
})
MongoDB连接node
//安装插件 npm i mongodb
const {MongoClient}=require('mongodb')
const client=new MongoClient('mongodb://127.0.0.1:27017')//服务器的地址
const main=async()=>{
await client.connect()//连接服务器
const db=client.db('mytest')//连接库
const cc=db.collection('cc')//连接集合
let d=await cc.find()//读取cc中全部数据
console.log(await d.toArray())
}
main().finally(()=>client.close())//关闭
//运行 node xxx(文件名)
中间件
1.
const express = require('express')
const app = express()
app.use((req,res,next)=>{//在get等等请求类型前面执行
console.log(`${req.method},${req.url},${Date.now()}`)
next()//执行后在执行get等请求
})
2.
const express=require('express')
const app=express()
app.get('/user',(req,res,next)=>{
console.log(req.method)
next()//调用完后执行下一个
},(req,res,next)=>{
console.log('666')
res.send()
})
3.路由中间件
const express=requirs('express')
const router=express.Router()
router.get('/',(req,res)=>{
console.log(req.method)//判断请求方法
res.send('/index')
})
router.get('/users',(req,res)=>{
console.log(req.method)
res.send('/users')
})
module.exports=router//导出
const app=express()
const router=require('./')//导入,文件名
app.use(router)//使用
app.use('/add',router)//在原有的路由后面加前加/add
app.use((req,res,next)=>{//没有监听到的路由
res.status(400).send('404 Not Found')
})
app.use((err,req,res,next)=>{//服务端的代码报错
console.log(err)
res.status(500).send('service Error')
})
mongoose的基本使用
const mongoose=require('mongoose')
const mian=async()=>{//连接本地数据库,mytest库的名称
await mongoose.connect('mongodb://localhost:27017/mytest')
}
mian().then(res=>{
console.log('mongodb连接成功')
}).catch(err=>{
console.log(err)
console.log('mongon链接失败')
})
const user=new mongoose.Schema({//集合里面的参数
username:{
type:String,//数据类型
require:true//是否必须
},
age:{
type:String,
require:true
}
})
const userModel=mongoose.model('User',user)//创建集合