留言板(Nodejs)
一、知识点
①nodejs实际开发中,通常把所有的HTML文件放到views目录中
②nodejs实际开发中,通常把所有的静态资源文件放到public目录中,方便统一处理
- 当浏览器收到HTML响应内容之后,会从上到下依次解析,解析过程中当发现link、script、img、iframe、video、audio等带有src或者href(link)属性标签的时候,会自动对这些资源发起新的请求,这些资源就是静态资源
- 把所有的静态资源放到统一的目录中,可以灵活的控制文件是否能被用户访问
- 但是需要注意的是,客户端里的请求路径需要改成 /public/xxx 的形式,其中 / 就是url的根路径
③表单提交的数据处理需要使用nodejs的url模块,其中url.parse(‘地址’,true)可以将路径解析成为一个方便操作的对象
var url=require('url');
var path='/say?name=乔峰&message=降龙十八掌';
var obj=url.parse(path,true);
console.log(obj);
console.log(obj.pathname);
console.log(obj.query);

④通过服务器让客户端重定位,需要两个步骤,第一个是状态码(statusCode)设置为302(302是临时重定向,浏览器没有记忆功能),第二个是在响应头(setHeader)中通过Location重定向
二、功能实现
①项目目录

②HTML文件
- index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>留言板</title>
<link rel="stylesheet" href="/public/lib/bootstrap/dist/css/bootstrap.css">
</head>
<body>
<div class="header container">
<div class="page-header">
<h1>留言板 <small>留言列表</small></h1>
<a class="btn btn-success" href="/post">发表留言</a>
</div>
</div>
<div class="comments container">
<ul class="list-group">
{{each comments}}
<li class="list-group-item">
{{$value.name}}说: {{$value.message}}
<span class="pull-right">{{$value.datetime}}</span>
</li>
{{/each}}
</ul>
</div>
</body>
</html>
- post.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>留言板</title>
<link rel="stylesheet" href="/public/lib/bootstrap/dist/css/bootstrap.css">
</head>
<body>
<div class="header container">
<div class="page-header">
<h1><a href="/" >留言板 <small>添加留言</small></a></h1>
</div>
</div>
<div class="comments container">
<form action="/say" method="GET">
<div class="form-group">
<label for="name">你的大名</label>
<input type="text" id="name" name="name" class="form-control" placeholder="请输入姓名" required minlength="2" maxlength="10">
</div>
<div class="form-group">
<label for="message">留言内容</label>
<textarea id="message" name="message" class="form-control" placeholder="请输入留言内容" cols='30' rows='10' required minlength="5" maxlength="20"></textarea>
</div>
<button type="submit" class="btn btn-default">发表</button>
</form>
</div>
</body>
</html>
- 404.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>404</title>
</head>
<body>
<h1>抱歉,您访问的页面失联了....</h1>
</body>
</html>
③app.js文件
//加载模块
var http=require('http');
var fs=require('fs');
var url=require('url');
var temlate=require('art-template');
// 模拟首页留言列表数据
var comments=[
{name:"赵一",message:"你用什么编辑器?",datetime:"2018-1-1"},
{name:"孙二",message:"今天天气真好",datetime:"2018-1-1"},
{name:"张三",message:"飞流直下三千只",datetime:"2018-1-1"},
{name:"李四",message:"哈哈哈哈哈",datetime:"2018-1-1"},
{name:"王五",message:"楼上是傻逼",datetime:"2018-1-1"}
]
//创建web服务
var server=http.createServer();
server.on('request',function(request,response){
/* var url=request.url; 把路径解析成一个对象*/
var parseObj=url.parse(request.url,true);
var pathname=parseObj.pathname;
//请求路径不同,返回不同的数据
if(pathname==='/'){
// 请求路径是根目录,即请求留言列表页
fs.readFile('./views/index.html',function(err,data){
if(err){
return response.end('404 Not Found');
}
var htmlStr=temlate.render(data.toString(),{
comments:comments
});
response.end(htmlStr);
});
}else if(pathname==='/post'){
//请求路径是 /post 即跳转至添加留言页面
fs.readFile('./views/post.html',function(err,data){
if(err){
return response.end('404 Not Found')
}
response.end(data);
});
}else if(pathname.indexOf('/public/')===0){
//请求路径是以 /public/ 开头,即请求静态资源的文件
fs.readFile('.'+pathname,function(err,data){
if(err){
return response.end('404 Not Found');
}
response.end(data);
});
}else if(pathname==='/say'){
//请求路径是 /say 即表单提交
var comment=parseObj.query;
comment.datetime='2018-2-10';
comments.unshift(comment);
//重定向,跳转回首页
response.statusCode=302;
response.setHeader('Location','/');
response.end();
} else{
//请求路径为其他都设置404
fs.readFile('./views/404.html',function(err,data){
if(err){
return response.end('404 Not Found');
}
response.end(data);
});
}
});
//创建监听对象
server.listen(3000,function(){
console.log('Server is running...')
})
④效果演示

留言板(Nodejs)的更多相关文章
- nodejs中利用expresss脚手架和bootstrap,数据库mongodb搭建的留言板案例
## 1. 先打开编辑器,创建一个项目 ## 2. 再打开cmd命令提示符下载express脚手架 express 项目名 --view=ejs 或express -e 项目名 ## ...
- AngularJs学习笔记(制作留言板)
原文地址:http://www.jmingzi.cn/?post=13 初学Anjularjs两天了,一边学一边写的留言板,只有一级回复嵌套.演示地址 这里总结一下学习的过程和笔记.另外,看看这篇文章 ...
- dd——留言板再加验证码功能
1.找到后台-核心-频道模型-自定义表单 2.然后点击增加新的自定义表单 diyid 这个,不管他,默认就好 自定义表单名称 这个的话,比如你要加个留言板还是投诉建议?写上去呗 数据表 这个不要碰, ...
- asp.net留言板项目源代码下载
HoverTree是一个asp.net开源项目,实现了留言板功能. 前台体验网址:http://hovertree.com/guestbook/ 后台请下载源代码安装. 默认用户名:keleyi 默认 ...
- html的留言板制作(js)
这次留言板运用到了最基础的localstorage的本地存储,展现的效果主要有: 1.编写留言2.留言前可以编辑自己的留言昵称.不足之处: 1.未能做出我喜欢的类似于网易的叠楼功能. 2.未能显示评论 ...
- 11月8日PHP练习《留言板》
一.要求 二.示例页面 三.网页代码及网页显示 1.denglu.php 登录页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...
- [课程设计]Scrum 3.7 多鱼点餐系统开发进度(留言板选择方案)
Scrum 3.7 多鱼点餐系统开发进度(留言板选择方案) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统W ...
- [课程设计]Scrum 3.6 多鱼点餐系统开发进度(用户测试反馈页面构思&留言板设计)
Scrum 3.6 多鱼点餐系统开发进度(用户测试反馈页面构思&留言板设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团 ...
- 用 Express4 写一个简单的留言板
Knowledge Dependence:阅读文本前,你需要熟悉 Node.js 编程.Express 以及相关工具和常用中间件的使用. Node.js 以其单线程异步非阻塞的特点,越来越被广大的 W ...
随机推荐
- mysql测试,配置环境 mysql' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
参考链接:https://www.cnblogs.com/ios9/p/9713388.html 1.设置一下环境变量: 右击我的电脑——>属性——>高级系统设置——> ...
- mysql连接不释放
环境: 持久层:JPA 数据库连接池:druid 数据库中间件:Mycat 数据库:Mysql 报错: Unable to acquire JDBC Connection 排查步骤: 方法一: 1.d ...
- GitLab+Jenkins持续集成
一.概述 GitLab是一个代码仓库,用来管理代码.Jenkins是一个自动化服务器,可以运行各种自动化构建.测试或部署任务.所以这两者结合起来,就可以实现开发者提交代码到GitLab,Jenkins ...
- NOI2019:Stay at Home
7.16 NOI D1 从同步赛开始更起好了 先看了一圈题目,发现T1非常可做,二次函数因为对称轴在\(x < 0\)的地方所以有跟一次函数类似的单调性,搞个单调队列维护一下似乎就可以了.大力码 ...
- 【1】volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以 ...
- Linux学习笔记之tail命令显示最后n行
tail :输出文件的最后几行. 用于linux查看日志的时候很方便,假如日志文件为:Console.log用法:1. tail Console.log tail # 输出文件最后10行的内容 2. ...
- Linq实现分组后取最大(小)值
var beatles = (new[] { new { inst = "张三" , age="50" }, new { inst = "张三&quo ...
- C语言-MySQL单表查询(vs2013环境)
一.首先配置项目属性: 1.打开mysql的安装路径,找到include文件夹和lib文件夹 如图: 2.在vs2013中, 打开项目–> 属性 –>VC++目录 如图: 把将nclude ...
- js删除对象里的某一个属性
var a={"id":1,"name":"danlis"}; //添加属性 a.age=18; console.log(a); //结果: ...
- springboot使用RestHighLevelClient7简单操作ElasticSearch7增删查改/索引创建
本次操作是在 Windows上安装ElasticSearch7 进行操作 导入依赖 <?xml version="1.0" encoding="UTF-8&qu ...