前后端交互的留言板功能的实现。

先创建工程。

工程的创建前文已经介绍,和前文相同,本文依旧用到express依赖项,所以只需要在终端中打开文件,

然后输入npm install express即可,创建文件可参考前文。

下附前文链接:https://blog.csdn.net/qq_39138295/article/details/82192124

本文的大致流程和上传头像功能基本类似。

创建完成之后,项目文件夹下的文件目录如上图所示。

进入index.html文件中,设置留言板的基本按钮:

<h1>我的留言板</h1>

<textarea name="message" id="" cols="30" rows="10"></textarea>

<button onclick="sendMessage()">留言</button>

扫描二维码关注公众号,回复: 3054558 查看本文章

此时在浏览器中打开,可以看到下图:

我们可以看到留言板是可以左右拉动的,但是大多的留言板文本输入框都是固定大小的,此时我们需要设置textarea的样式,让它不可拉动。具体代码如下:

<style>

textarea{

resize: none;

}

</style>

这样一来就可以看到下图的样子了:

此时我们需要获取留言板内的文本内容,然后发送给后端服务器,具体代码如下:

var textarea = document.querySelector('textarea')

function sendMessage(){

// 获取文本区域的内容

var message = textarea.value

// 获取当前的最新时间

var time = new Date()

var year = time.getFullYear()

var month = time.getMonth() + 1

var day = time.getDate()

var hours = time.getHours()

var minutes = time.getMinutes()

var seconds = time.getSeconds()

var newTime = year +'年'+ month +'月'+ day +'日'+hours + ':' +minutes +':'+second

console.log(newTime)

// 传输数据到服务器

var xhr = new XMLHttpRequest()

// form 数据量多且私密 用form

xhr.open('get','/messageSend?content='+message+'&time='+newTime)

xhr.send()

}

将数据传送过去之后,在后端需要将数据保存,然后再传给前端,由前端读取之后再显示在浏览器上面。

来到后端,index.js文件中:

var express = require('express')

// 引入写入文件模块

var fs = require('fs')

var web = express()

web.use(express.static('public'))

allMessage = []

fs.exists('data/info.json',function(isExists){

if(!isExists)

{

fs.mkdirSync('data')

}

else

{

// 获取之前所有的留言数据,并且将数据交给allMessage

allMessage = JSON.parse('data/info.json')

}

})

web.get('/messageSend',function(req,res){

req.query.content = req.query.content.replace(/</g,'&lt;')

req.query.content = req.query.content.replace(/>/g,'&gt;')

// unshift 将数据添加到列表当中的第一个位置

allMessage.unshift(req.query)

fs.writeFile('data/info.json',JSON.stringify(allMessage),function(err){

if(err)

{

res.json({status:401,message:"留言失败"})

}

else

{

res.json({status:200,message:"留言成功"})

}

})

})

web.listen('8080',function(){

console.log('服务器启动')

})

启动服务器,在浏览器上输入本地接口,可以看到下图所示:

并且还可以看到工程文件下面多了一个文件夹,就是后端在接收到前端的数据之后保存下来的:

是一个json文件。

接下来我们只需要完成前端在点击留言按钮的时候,我们的界面上能够展示出来留言的内容即可。

也就是通过一个点击事件,然后前端向后端请求,接着后端向前端发送数据的一个过程,从刚才保存的文件中读取出来在留言板上所写的内容即可。

此处用到get请求:

前端展示设置:

function getAllMessage(){

var xhr = new XMLHttpRequest()

xhr.open('get','/allMessage')

xhr.send()

xhr.onreadystatechange = function(){

if(xhr.readyState == 4)

{

// console.log(xhr.responseText)

var allMessage = JSON.parse(xhr.responseText)

console.log(allMessage)

// 遍历数据

for(var index = 0;index<allMessage.length;index++)

{

var messageBox = document.createElement('div')

messageBox.style.borderRadius = '10px'

messageBox.style.margin = '5px'

messageBox.style.border = '1px solid red'

messageBox.style.padding = '5px'

messageBox.innerHTML = '留言内容:'+ allMessage[index].content+'<br>'+'留言时间:'+allMessage[index].time

document.body.appendChild(messageBox)

}

}

}

}

后端发送设置:

web.get('/allMessage',function(req,res){

res.send(allMessage)

})

最后浏览器的所有展示的页面如下图所示:

下附所有代码:

index.html

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>留言板</title>

<style>

textarea{

resize: none;

}

</style>

</head>

<body>

<h1>我的留言板</h1>

<textarea name="message" id="" cols="30" rows="10"></textarea>

<button onclick="sendMessage()">留言</button>

<script>

var textarea = document.querySelector('textarea')

function sendMessage(){

// 获取文本区域的内容

var message = textarea.value

// 获取当前的最新时间

var time = new Date()

var year = time.getFullYear()

var month = time.getMonth() +1

var day = time.getDate()

var hours = time.getHours()

var minutes = time.getMinutes()

var seconds = time.getSeconds()

var newTime = year +'年'+ month +'月'+ day +'日'+hours + ':' +minutes +':'+seconds

console.log(newTime)

// 传输数据到服务器

var xhr = new XMLHttpRequest()

// get 简单,不安全,

// form 数据量多且私密 用form

xhr.open('get','/messageSend?content='+message+'&time='+newTime)

xhr.send()

xhr.onreadystatechange = function(){

if(xhr.readyState == 4)

{

// 获取服务器响应并且将数据转化成json

var jsonData = JSON.parse(xhr.responseText)

if(jsonData.status == 200)

{

console.log('留言成功')

}

else

{

console.log('留言失败')

}

window.location.href = 'http://localhost:8080'

}

}

}

getAllMessage()

function getAllMessage(){

var xhr = new XMLHttpRequest()

xhr.open('get','/allMessage')

xhr.send()

xhr.onreadystatechange = function(){

if(xhr.readyState == 4)

{

// console.log(xhr.responseText)

var allMessage = JSON.parse(xhr.responseText)

console.log(allMessage)

// 遍历数据

for(var index = 0;index<allMessage.length;index++)

{

var messageBox = document.createElement('div')

messageBox.style.borderRadius = '10px'

messageBox.style.margin = '5px'

messageBox.style.border = '1px solid red'

messageBox.style.padding = '5px'

messageBox.innerHTML = '留言内容:'+ allMessage[index].content+'<br>'+'留言时间:'+allMessage[index].time

document.body.appendChild(messageBox)

}

}

}

}

</script>

</body>

</html>

index.js

var express = require('express')

// 引入写入文件模块

var fs = require('fs')

var web = express()

web.use(express.static('public'))

allMessage = []

fs.exists('data/info.json',function(isExists){

if(!isExists)

{

fs.mkdirSync('data')

}

else

{

// 获取之前所有的留言数据,并且将数据交给allMessage

allMessage = JSON.parse('data/info.json')

}

})

web.get('/messageSend',function(req,res){

// var content = req.query.content

// var time = req.query.time

req.query.content = req.query.content.replace(/</g,'&lt;')

req.query.content = req.query.content.replace(/>/g,'&gt;')

// unshift 将数据添加到列表当中的第一个位置

allMessage.unshift(req.query)

fs.writeFile('data/info.json',JSON.stringify(allMessage),function(err){

if(err)

{

res.json({status:401,message:"留言失败"})

}

else

{

res.json({status:200,message:"留言成功"})

}

})

})

web.get('/allMessage',function(req,res){

res.send(allMessage)

})


 

web.listen('8080',function(){

console.log('服务器启动')

})

至此我们便完成了整个留言板的功能。再加上上一篇的头像上传的功能,我们是不是可以实现一个比较丰富的个人留言的功能模块呢?赶紧尝试下吧。

上传头像的文章链接:https://blog.csdn.net/qq_39138295/article/details/82353858

猜你喜欢

转载自blog.csdn.net/qq_39138295/article/details/82354577