留言本案例(node.js)

目录

下载模板引擎                         npm install art-template

安装 boostrap                         npm install bootstrap

boostrap依赖于jquery,所以还要安装jquery     npm install jquery

安装用于格式化时间的模块     npm install silly-datetime

项目目录 

记得将下载好的 boostrap 和 jquery 这两个第三方库放到 /public/lib 目录下

   

服务端入口文件 

app.js 

var http = require('http')
var fs = require('fs')
var template = require('art-template')
var url = require('url')
var sd = require('silly-datetime')

var comments = [
	{
		name: '宙斯',
		message: '我是众神之王',
		dateTime: '2021-01-20'
	},
	{
		name: '波塞冬',
		message: '我是海神',
		dateTime: '2021-02-21'
	},
	{
		name: '雅典娜',
		message: '我是智慧之神',
		dateTime: '2021-03-22'
	},
]

http
	.createServer(function(req,res) {
		// url.parse方法将路径解析为一个方便操作的对象,第二个参数为true表示将查询字符串转为一个对象
		var parseObj = url.parse(req.url, true)
		// 单独获取不包含查询字符串的路径部分
		var pathname = parseObj.pathname
		if(pathname === '/') {
			fs.readFile('./views/index.html',function(err,data) {
				if(err) {
					return res.end('404 Not Found.')
				}
				var htmlStr = template.render(data.toString(), {
					comments: comments
				})
				res.end(htmlStr)
			})
		} else if(pathname === '/post') {
			fs.readFile('./views/post.html', function (err, data) {
				if (err) {
					return res.end('404 Not Found.')
				}
				res.end(data)
			})
		} else if(pathname.indexOf('/public/') === 0) {
			//如果请求路径是以/public/开头的,则我认为你要获取public中的某个资源
			//所以可以把请求路径当作文件路径来进行读取
			fs.readFile('.' + pathname, function(err, data) {
				if(err){
					return res.end('404 Not Found.')
				}
				res.end(data)
			})
		} else if(pathname === '/pinglun') {
			// 1. 获取表单提交的数据
			var comment = parseObj.query
			// 2. 将当前时间添加到数据对象中
			comment.dateTime = sd.format(new Date(), 'YYYY-MM-DD HH:mm')
			comments.unshift(comment)
			// 3. 让用户重定向到首页 /
			// 302状态码表示临时重定向,浏览器收到该状态码就会自动去响应头找Location
			res.statusCode = 302
			res.setHeader('Location','/')
			res.end()
		} else {
			fs.readFile('./views/404.html', function(err, data) {
				if(err) {
					return res.end('404 Not Found.')
				}
				res.end(data)
			})
		}
	})
	.listen(3000,function () {
		console.log('running...')
	})

留言板首页渲染  

view/index.html 

<!DOCTYPE html>
<html>
<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>Message Board<small> speak your mind freely</small></h1>
			<a class="btn btn-success" href="/post">发表留言</a>
		</div>
	</div>
	<div class="comments container">
		<ul class="list-group">
			<!--这里的each 是art-template的模板语法-->
			{{each comments}}
			<li class="list-group-item">{{ $value.name }}说: {{ $value.message }}<span class="pull-right">{{ $value.dateTime }}</span></li>
			{{/each}}
		</ul>
	</div>
</body>
</html>

用户在首页点击“发表留言”之后跳转的页面 

表单中需要提交的表单控件元素必须具有 name 属性,因为form表单提交之后,后台通过name属性获取表单中的内容。 

 view/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>Home<small> Leave a comment</small></h1>
		</div>
		<div class="comments container">
			<form action="/pinglun" method="get">
				<div class="form-group">
					<label for="input_name">你的大名</label>
					<input type="text" class="form-control" required minlength="2" maxlength="10" id="input_name" name="name" placeholder="请写入你的姓名"></input>
				</div>
				<div class="form-group">
					<label class="textarea_message">留言内容</label>
					<textarea class="form-control" name="message" id="textarea_message" cols="30" rows="10" required minlength="5" maxlength="100"></textarea>
				</div>
				<button type="submit" class="btn btn-default">发表</button>
			</form>
		</div>
	</div>
</body>
</html>

404处理

404.html

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8">
		<title>404</title>
	</head>
	<body>
		<h1>抱歉!您要访问的页面失灵啦...</h1>
	</body>
</html>

首页 

点击“发表留言” 

写完留言,点击"发表",页面自动跳转到首页

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漂流の少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值