从零学习node.js之利用express搭建简易论坛(七)

2020-06-17 06:42:22易采站长站整理

if(req.session.user){
var title = req.query.title,
content = req.query.content,
uid = req.session.user.uid,
createtime = parseInt(Date.now()/1000);

var params = {uid:uid, title:title, content:content, createtime:createtime};

list_m.addTopic(params, function(result){
// console.log(result);
if(result.affectedRows){
res.json({code:0, msg:'添加成功', data:{url:'/list/'+result.insertId+'.html', title:title, author:req.session.user.username, createtime:createtime}});
}else{
res.json({code:2, msg:'添加失败,请重新尝试'})
}
});

}else{
res.json({code:1, msg:'您还未登录'})
}
})

这里用到了

list_m.addTopic
,因此需要在models/list.js中添加 addTopic 方法:


// models/list.js

/*
添加主题
uid, title, content, createtime
*/
addTopic : function(params, cb){
pool.getConnection(function(err, connection){
if(err) throw err;

connection.query('INSERT INTO `list` SET ?', params, function(err, result){
if(err) throw err;

cb(result);
connection.release();
// 接下来connection已经无法使用,它已经被返回到连接池中
})
});
}

4.3 详情页

在首页列表中,可以看到,我们将详情页的链接设置为了/list/1.html的方式,也可以设置成其他的方式(比如 /list?pid=1 等),只要设置好路由就行。


// routes/list.js

// http://127.0.0.1:3000/list/1.html
router.get('/:pid.html', function(req, res) {
var pid = req.params.pid || 1;

console.log(pid);
});

在详情页中需要获取到这个主题的详细信息和对这个主题的回复,因此在list_m中:


// models/list.js

// 根据id查询主题的详情信息
getListById : function(id, cb){
pool.getConnection(function(err, connection){
if(err) throw err;

connection.query('SELECT * FROM `list` WHERE `id`=?', [id], function(err, result){
if(err) throw err;

cb(result);
connection.release();
// 接下来connection已经无法使用,它已经被返回到连接池中
})
});
},

// 某主题的回复
getReplyById : function(pid, cb){
pool.getConnection(function(err, connection){
if(err) throw err;

connection.query('SELECT * FROM `reply` WHERE `pid`=?', [pid], function(err, result){
if(err) throw err;

cb(result);
connection.release();
// 接下来connection已经无法使用,它已经被返回到连接池中
})
});
}

然后在路由中进行调用,这里使用async简单的控制了下两个异步的流程问题: