1、前端代码
<a href="/lydetail?id=<%-item._id %>"><%-item.title %></a>
url路径传参,后台index.js用req.query接收值
<body>
<!--后台数据加载到页面-->
<%- include('head.ejs') %>
<h1>留言</h1>
<div class="form-group">
<label for="title">标题</label>
<input type="text" class="form-control" id="title" placeholder="title">
</div>
<div class="form-group">
<label for="con">内容</label>
<textarea type="text" class="form-control xheditor" id="con" placeholder="con"></textarea>
</div>
<button class="btn btn-success liuyan">发布留言</button>
<h2>留言列表</h2>
<table class="table">
<tr><th>序号</th><th>标题</th><th>内容</th></tr>
<% list.map(function(item,i){ %>
<tr>
<td><%-i+1 %></td>
<!--把id值传给后台(重点)-->
<td><a href="/lydetail?id=<%-item._id %>"><%-item.title %></a></td>
<td><%-item.con %></td>
</tr>
<% }) %>
</table>
<nav aria-label="Page navigation">
<ul class="pagination">
<li>
<a href="/liuyan?pageNum=<%-pageNum<1?1:parseInt(pageNum)-1 %>" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<!--<li><a href="/liuyan?pageNum=1">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>-->
<% if(page>4){ %>
<li><a href="/liuyan?pageNum=1">1</a></li>
<li><a href="/liuyan?pageNum=2">2</a></li>
<li><a href="#">....</a></li>
<li><a href="/liuyan?pageNum=<%-page-1 %>"><%-page-1 %></a></li>
<li><a href="/liuyan?pageNum=<%-page %>"><%-page %></a></li>
<% }else{ %>
<% for(let i =0;i<page;i++){ %>
<li><a href="/liuyan?pageNum=<%-i+1 %>"><%-i+1 %></a></li>
<% } %>
<% } %>
<li>
<a href="/liuyan?pageNum=<%-pageNum>page?page:parseInt(pageNum)+1 %>" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
</body>
2、index.js
获取数据库的_id的值的方法,通过mongodb对象Objectid
var ObjectId = require('mongodb').ObjectId;
let id = ObjectId(req.query.id)
此时的id即为数据库的_id
var express = require('express');
var router = express.Router();
var mongodb=require('mongodb').MongoClient;
var ObjectId=require('mongodb').ObjectId;
var db_str="mongodb://localhost:27017/html5"
var async=require('async')
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { name:req.session.name });
});
//登陆
router.get('/login',(req,res)=>{
res.render('login',{})
})
//注册
router.get('/register',(req,res)=>{
res.render('register',{})
})
//注销
router.get('/relogin',(req,res)=>{
req.session.destroy((err)=>{
if(err){
console.log(err)
}else{
res.redirect('/')
}
})
})
//留言
router.get('/liuyan',(req,res)=>{
// 页码
var pageNum=req.query.pageNum
pageNum=pageNum?pageNum:1;
// 总页数
var page=0;
// 每页数量
var size=3;
// 总条数
var count=0;
mongodb.connect(db_str,(err,database)=>{
database.collection('liuyan',(err,coll)=>{
async.series([
function(callback){
coll.find({}).toArray((err,data)=>{
count=data.length;
page=Math.ceil(count/size)
// 上一页/下一页
pageNum=pageNum<1?1:pageNum;
pageNum=pageNum>page?page:pageNum;
callback(null,'')
})
},
function(callback){
coll.find({}).sort({_id:-1}).limit(size).skip((pageNum-1)*size).toArray((err,data)=>{
callback(null,data)
})
}
],function(err,data){
// data == ['',data]
res.render('liuyan',{list:data[1],pageNum:pageNum,page:page,size:size,count:count})
database.close()
})
// coll.find({}).sort({_id:-1}).toArray((err,data)=>{
// res.render('liuyan',{list:data})
// database.close()
// })
})
})
})
//详情
router.get('/lydetail',(req,res)=>{
console.log(req.query)
let id=ObjectId(req.query.id)
mongodb.connect(db_str,(err,database)=>{
database.collection('liuyan',(err,coll)=>{
coll.find({_id:id}).toArray((err,data)=>{
res.render('lydetail',{detail:data[0].con})
database.close()
})
})
})
})
module.exports = router;