Node.js实现用户评论社区功能(体验前后端开发的乐趣)


Posted in Javascript onMay 09, 2019

前面

接着上一节的内容来,今天我们要完成一个用Node开发后台服务器,实现一个简单的用户评论社区。可以先看下效果图:

Node.js实现用户评论社区功能(体验前后端开发的乐趣)

Node.js实现用户评论社区功能(体验前后端开发的乐趣)

开始建立项目文件夹comment-list,在里面新建一个public文件夹,public文件夹存放我们允许客户端访问的资源,这里是公开的。app.js文件是我们服务端代码。

Node.js实现用户评论社区功能(体验前后端开发的乐趣)

index.html文件中放的是网站的首页内容,这里采用bootstrap框架快速搭建。可以先招一些假数据,以便页面渲染后看效果。核心代码:

<ul class="list-group comment-list">
 {{each comments}}
 <li class="list-group-item">{{$value.content}}<span class="time">{{$value.time}}</span> <span class="name">{{$value.name}}</span></li>
 {{/each}}
</ul>

这里采用js模板语法,等会会在服务端代码中将模板字符串渲染成真实数据。当用户访问网站根目录,服务端利用模板引擎解析渲染index.html,并且返回真实html字符串给浏览器解析。index.html会使用外链样式文件和外链脚本文件,切记这里的文件地址不能写相对路径,必须写url地址,看下面:

<link rel="stylesheet" href="/public/lib/bootstrap/dist/css/bootstrap.css">
<link rel="stylesheet" href="/public/css/index.css">
....
<script src="/public/js/index.js"></script>

文件地址以/public/开头,这里的/表示请求的根路径,浏览器在发送请求的时候会自动替换成http://127.0.0.1:3000/

Node.js实现用户评论社区功能(体验前后端开发的乐趣)

404.html主要用来处理用户请求不存在的资源时,我们友情提示下即可。

post.html主要是发表评论页面,这里同样采用bootstrap快速搭建,同时也是要注意文件路径问题。这里是一个表单,用来收集用户评论的内容然后提交到后台处理。表单提交数据可以根据form标签中的action属性指定提交地址,当点击提交按钮数据会发送到指定地址,由服务端接收处理即可。核心代码如下:

<form action="/comment" method="GET" role="form" class="comment-form">
 <legend>开始评论</legend>
 <div class="form-group">
 <label for="name">你的大名:</label>
 <input type="text" name="name" class="form-control" id="name" placeholder="请输入你的大名" required maxlength="10" minlength="2">
 </div>
 <div class="form-group">
 <label for="content">评论内容:</label>
 <textarea name="content" id="content" class="form-control" rows="6" required minlength="5" maxlength="10"></textarea>
 </div>
 <button type

编写服务端代码app.js

app.js中引入了node中http服务构建核心模块,fs文件操作模块,urlurl地址解析模块。art-template第三方包主要用来服务端模板引擎,解析刚刚的index.html模板字符串。我们要注意url核心模块中的parse方法,它可以将一个含有查询字符串的url地址解析成一个对象,通过这个对象我们很容易得到用户表单提交过来的数据,即是查询字符串的具体内容。可以看以下演示:

Node.js实现用户评论社区功能(体验前后端开发的乐趣)

通过url.parse()传入第二个参数:true,可以将query查询字符串转换成对象,便于后续获取提交的数据。

这里我们还用到了服务端重定向的概念,当用户提交表单数据后,页面会跳转至/comment地址,需要在服务端请求处理函数中设置响应状态码:302,并且通过响应头location属性告诉浏览器重定向的地址。代码如下:

res.statusCode = 302  // 设置响应状态码为302(重定向)
res.setHeader('location', '/') // 设置响应头location,告诉浏览器重定向地址

app.js中核心代码如下:

http.createServer((req, res) => {
 let obj = url.parse(req.url, true) // 得到url模板解析后的Url对象,传入第二个参数“true”,将form表单提交的查询字符串query转换成对象
 let pathname = obj.pathname
 let query = obj.query
 if (pathname === '/') {
 fs.readFile('./public/views/index.html', (err, data) => {
  if (err) {
  return res.end('404 NOT FOUND')
  }
  let htmlStr = template.render(data.toString(), {
  comments: comments
  })
  res.end(htmlStr)
 })
 } else if (pathname.indexOf('/public/') === 0){
 fs.readFile('.'+pathname, (err, data) => {
  if (err) {
  return res.end('404 NOT FOUND')
  }
  res.end(data)
 })
 } else if (pathname ==='/post') {
 fs.readFile('./public/views/post.html', (err, data) => {
  if (err) {
  return res.end('404 NOT FOUND')
  }
  res.end(data)
 })
 } else if (pathname === '/comment') {
 res.statusCode = 302  // 设置响应状态码为302(重定向)
 res.setHeader('location', '/') // 设置响应头location,告诉浏览器重定向地址
 if (query.name) {
  query.time = '2015-5-10'
  comments.unshift(query)
 } // 放置用户手动输入'/comment',导致query为空
 res.end() // 结束响应,不能少
 } else {
 fs.readFile('./public/views/404.html', (err, data) => {
  if (err) {
  return res.end('404 NOT FOUND')
  }
  res.end(data)
 })
 } 
}).listen(3000, () => {
 console.log('running...')
})

开启服务器之后即可愉快的发表评论了

Node.js实现用户评论社区功能(体验前后端开发的乐趣)

完整代码可以看GitHub地址:这里

说明

本篇文章出至于我的从零到一学习Node.js课程资料,如果大家觉得对你有帮助的话不妨给个star,我也会一直持续不断的更新相关系列教程。

项目地址:GitHub

总结

以上所述是小编给大家介绍的Node.js实现用户评论社区功能(体验前后端开发的乐趣),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
基于jquery的jqDnR拖拽溢出的修改
Feb 12 Javascript
JQuery AJAX 中文乱码问题解决
Jun 05 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
Dec 12 Javascript
JsRender for index循环索引用法详解
Oct 31 Javascript
javascript顺序加载图片的方法
Jul 18 Javascript
js实现简洁的TAB滑动门效果代码
Sep 06 Javascript
详解Bootstrap四种图片样式
Jan 04 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
May 17 Javascript
jQuery插件dataTables添加序号列的方法
Jul 06 Javascript
JAVA中截取字符串substring用法详解
Apr 14 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
Aug 17 Javascript
bootstrap-table组合表头的实现方法
Sep 07 Javascript
微信小程序中显示倒计时代码实例
May 09 #Javascript
微信小程序日历弹窗选择器代码实例
May 09 #Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
May 09 #Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
May 09 #Javascript
uni-app之APP和小程序微信授权方法
May 09 #Javascript
详解使用uni-app开发微信小程序之登录模块
May 09 #Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
May 09 #Javascript
You might like
php根据生日计算年龄的方法
2015/07/13 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
2017/07/03 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
JavaScript中的继承之类继承
2016/05/01 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
2016/08/29 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
Angular2搜索和重置按钮过场动画
2017/05/24 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
vue中axios实现数据交互与跨域问题
2019/05/12 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
Python语言快速上手学习方法
2018/12/14 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
详解Html5页面实现下载文件(apk、txt等)的三种方式
2018/10/22 HTML / CSS
微软中国官方旗舰店:销售Surface、Xbox One、笔记本电脑、Office
2018/07/23 全球购物
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
实习介绍信模板
2015/01/30 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
自荐信范文
2019/05/20 职场文书
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS
分享Python获取本机IP地址的几种方法
2022/03/17 Python