app.js 详情
```
const express = require('express')//express是node中的后端框架
const app = express()
const fs = require('fs')
app.engine('html', require('express-art-template'))//解析html要引入使用express-art-template
app.use('/node_modules', express.static('./node_modules'))
// 别名 开放静态资源
app.use('/public', express.static('./public'))
//配置body-parser,前端post给后端的信息,后端要用req.body来接收,要使用req.body必须借助body-parser
//express里原本不具备接收post的来的信息的能力,要借助外部插件body-parser,以前老版本的express中必须安装express后,在安装body-parser
//现在body-parser被内置在的express中
app.use(express.urlencoded({extended: false}))
app.use(express.json())
// 配置body-parser
app.get('/', function (req, res) {
// res.send('我是服务器信息')//发送一个数据与res.render之间只能存在一个
res.render('boot-login.html')//渲染页面,发送给前端
//不管是res.render或者res.send发送给前端都必须要刷新页面
//页面必须放在views文件夹内
})
app.post('/login', function (req, res) {
//req(request):是前端给后端的信息
//res(response):是后端给前端的信息
//console.log(req.body)//post来的信息必须用req.body接受
fs.readFile('./data/users.json', function (error, data) {
if (error) {
console.log(error)
} else {
//console.log(JSON.parse(data))
/*for(item of JSON.parse(data)){
if(item.account==req.body.account&&item.password==req.body.password){
res.render('index.html')
}else{
res.send('账号或密码错误')
}*/
const user = JSON.parse(data).find(function (item) {
return item.account == req.body.account
})//find方法,是把数组里的每一个元素都拿出来根据return的条件进行比较,函数的传参就代表数组中的每一个元素(循环)
//如果能找到,则user就是满足条件的第一个对象(找到一个后,不再往后查找了)
//如果找不到,则user是underfined
if (user && user.password == req.body.password) {
delete user.password
res.render('index.html', {user})
} else {
res.send('账号或密码错误')
}
}
})
/* if(req.body.account==='123456'&&req.body.password==='abc'){
res.render('index.html')
}else{
res.send('账号或密码错误')
}*/
})
app.get('/test_account', function (req, res) {
console.log(req.query)//get用req.query来接收
fs.readFile('./data/users.json', function (error, data) {
if (error) {
console.log(error)
} else {
/* const aaa =JSON.parse(data).find(function (item) {//JSON.parse(data):解析乱码
return item.account==req.query.account
})*/
/*if(aaa){
res.send(true)
}else{
res.send(false)
}*/
// res.send(aaa?true:false)
/* res.send(Boolean(JSON.parse(data).find(function (item) {//JSON.parse(data):解析乱码
return item.account==req.query.account
})))*///null,0,'',undefined,NaN会被Boolean转换为false
res.send(Boolean(JSON.parse(data).find(item => item.account == req.query.account)))
//箭头函数
//当函数参数只有一个,括号可以省略;但是没有参数时,括号不可以省略。
//一种只包含一个表达式,省略掉了{ ... }和return。还有一种可以包含多条语句,这时候就不能省略{ ... }和return
}
})
})
app.get('/addScore',(req,res)=>{
fs.readFile('./data/users.json',(error,data)=>{
if(error){
console.log(error)
}else{
/* const user = JSON.parse(data).find(item => item.account == req.query.account)
if(user){
user.bestScore = Math.max(req.query.scoreNum,user.bestScore)
console.log(user)
}else{
res.send('用户不存在')
}*/
const users=JSON.parse(data)
const index=users.findIndex(item => item.account == req.query.account)
users[index].bestScore=Math.max(req.query.scoreNum,users[index].bestScore)
console.log(users)
fs.writeFile('./data/users.json',JSON.stringify(users),error=>{//JSON.stringify(users):将数组转化为字符串
if(error){
console.log(error)
}
})
}
})
})
app.listen(3000, function () {//3000是端口号
console.log('app is running...')
})
```
const express = require('express')//express是node中的后端框架
const app = express()
const fs = require('fs')
app.engine('html', require('express-art-template'))//解析html要引入使用express-art-template
app.use('/node_modules', express.static('./node_modules'))
// 别名 开放静态资源
app.use('/public', express.static('./public'))
//配置body-parser,前端post给后端的信息,后端要用req.body来接收,要使用req.body必须借助body-parser
//express里原本不具备接收post的来的信息的能力,要借助外部插件body-parser,以前老版本的express中必须安装express后,在安装body-parser
//现在body-parser被内置在的express中
app.use(express.urlencoded({extended: false}))
app.use(express.json())
// 配置body-parser
app.get('/', function (req, res) {
// res.send('我是服务器信息')//发送一个数据与res.render之间只能存在一个
res.render('boot-login.html')//渲染页面,发送给前端
//不管是res.render或者res.send发送给前端都必须要刷新页面
//页面必须放在views文件夹内
})
app.post('/login', function (req, res) {
//req(request):是前端给后端的信息
//res(response):是后端给前端的信息
//console.log(req.body)//post来的信息必须用req.body接受
fs.readFile('./data/users.json', function (error, data) {
if (error) {
console.log(error)
} else {
//console.log(JSON.parse(data))
/*for(item of JSON.parse(data)){
if(item.account==req.body.account&&item.password==req.body.password){
res.render('index.html')
}else{
res.send('账号或密码错误')
}*/
const user = JSON.parse(data).find(function (item) {
return item.account == req.body.account
})//find方法,是把数组里的每一个元素都拿出来根据return的条件进行比较,函数的传参就代表数组中的每一个元素(循环)
//如果能找到,则user就是满足条件的第一个对象(找到一个后,不再往后查找了)
//如果找不到,则user是underfined
if (user && user.password == req.body.password) {
delete user.password
res.render('index.html', {user})
} else {
res.send('账号或密码错误')
}
}
})
/* if(req.body.account==='123456'&&req.body.password==='abc'){
res.render('index.html')
}else{
res.send('账号或密码错误')
}*/
})
app.get('/test_account', function (req, res) {
console.log(req.query)//get用req.query来接收
fs.readFile('./data/users.json', function (error, data) {
if (error) {
console.log(error)
} else {
/* const aaa =JSON.parse(data).find(function (item) {//JSON.parse(data):解析乱码
return item.account==req.query.account
})*/
/*if(aaa){
res.send(true)
}else{
res.send(false)
}*/
// res.send(aaa?true:false)
/* res.send(Boolean(JSON.parse(data).find(function (item) {//JSON.parse(data):解析乱码
return item.account==req.query.account
})))*///null,0,'',undefined,NaN会被Boolean转换为false
res.send(Boolean(JSON.parse(data).find(item => item.account == req.query.account)))
//箭头函数
//当函数参数只有一个,括号可以省略;但是没有参数时,括号不可以省略。
//一种只包含一个表达式,省略掉了{ ... }和return。还有一种可以包含多条语句,这时候就不能省略{ ... }和return
}
})
})
app.get('/addScore',(req,res)=>{
fs.readFile('./data/users.json',(error,data)=>{
if(error){
console.log(error)
}else{
/* const user = JSON.parse(data).find(item => item.account == req.query.account)
if(user){
user.bestScore = Math.max(req.query.scoreNum,user.bestScore)
console.log(user)
}else{
res.send('用户不存在')
}*/
const users=JSON.parse(data)
const index=users.findIndex(item => item.account == req.query.account)
users[index].bestScore=Math.max(req.query.scoreNum,users[index].bestScore)
console.log(users)
fs.writeFile('./data/users.json',JSON.stringify(users),error=>{//JSON.stringify(users):将数组转化为字符串
if(error){
console.log(error)
}
})
}
})
})
app.listen(3000, function () {//3000是端口号
console.log('app is running...')
})
```