1 Star 0 Fork 19

曹洋/node-curd

forked from 李志远/node-curd 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
4添加留言功能.txt 4.04 KB
一键复制 编辑 原始数据 按行查看 历史
李志远 提交于 2016-11-22 16:05 . 新增留言功能
打开 post.js ,修改 Post.prototype.save 中要存入的文档为:
var post = {
name: this.name,
time: time,
title:this.title,
post: this.post,
comments: []
};
我们将 Post.getOne 函数里的:
doc.post = markdown.toHTML(doc.post);
修改为:
if (doc) {
doc.post = markdown.toHTML(doc.post);
doc.comments.forEach(function (comment) {
comment.content = markdown.toHTML(comment.content);
});
}
接下来我们在 models 下新建 comment.js 文件,添加如下代码:
var mongodb = require('./db');
function Comment(name, minute, title, comment) {
this.name = name;
this.minute = minute;
this.title = title;
this.comment = comment;
}
module.exports = Comment;
//存储一条留言信息
Comment.prototype.save = function(callback) {
var name = this.name,
minute = this.minute,
title = this.title,
comment = this.comment;
//打开数据库
mongodb.open(function (err, db) {
if (err) {
return callback(err);
}
//读取 posts 集合
db.collection('posts', function (err, collection) {
if (err) {
mongodb.close();
return callback(err);
}
//通过用户名、时间及标题查找文档,并把一条留言对象添加到该文档的 comments 数组里
collection.update({
"name": name,
"time.minute":minute,
"title": title
}, {
$push: {"comments": comment}
} , function (err) {
mongodb.close();
if (err) {
return callback(err);
}
callback(null);
});
});
});
};
修改 index.js ,在 Post = require('../models/post.js') 后添加一行代码:
Comment = require('../models/comment.js');
接下来我们创建 comment 的视图文件,在 views 文件夹下新建 comment.ejs ,添加如下代码(e.g. 首先要先插入一个留言再显示):
<br>
<!--留言的展示-->
<% post.comments.forEach(function(comment){ %>
<p>
<%= comment.name %>
<span class="info"> 回复于 <%= comment.time %></span>
</p>
<p><%- comment.content %></p>
<% })%>
<!--添加留言的表单-->
<% if (user) { %>
<form method="post" action="/comment/<%= post.name %>/<%= post.time.minute %>/<%= post.title %>">
发布人:<%= user.name %>
<input type="hidden" name="name" value="<%= user.name %>"/><br><br>
<textarea name="content" rows="5" cols="80"></textarea><br>
<input type="submit" value="留言" />
</form>
<% }else{ %>
<form method="post">
回应请先<a href="/login">登录</a>或<a href="/reg">注册</a>
<textarea name="content" rows="5" cols="80" id="tb"></textarea><br>
<input type="submit" value="留言" id="sb" />
</form>
<% } %>
<script>
window.onload = function(){
var textarea = document.querySelector('#tb');
var button = document.querySelector('#sb');
button.onclick = function(e){
e.preventDefault();
location.href = '/login';
}
textarea.onfocus = function(){
location.href = '/login';
}
}
</script>
打开 article.ejs ,在 <%- include footer %> 前添加一行代码:
<%- include comment %>
最后,修改 index.js ,注册留言的 POST 响应,在 app.get('/u/:name/:day/:title') 后添加如下代码:
app.post('/comment/:name/:minute/:title', function (req, res) {
var date = new Date(),
time = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " +
date.getHours() + ":" + (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes());
var comment = {
name: req.body.name,
time: time,
content: req.body.content
};
var newComment = new Comment(req.params.name, req.params.minute, req.params.title, comment);
newComment.save(function (err) {
if (err) {
req.flash('error', err);
return res.redirect('back');
}
req.flash('success', '留言成功!');
res.redirect('back');
});
});
注意:这里我们使用 res.redirect('back'); ,即留言成功后返回到该文章页。
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/caoyang1991/simple.git
[email protected]:caoyang1991/simple.git
caoyang1991
simple
node-curd
master

搜索帮助