// 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简单的控制了下两个异步的流程问题:
// :3000/list/1.html router.get('/:pid.html', function(req, res) { var pid = req.params.pid || 1; async.parallel([ function(callback){ list_m.getListById(pid, function(result){ callback(null, result[0]); }) }, function(callback){ list_m.getReplyById(pid, function(result){ callback(null, result); }) }, ], function(err, results){ // console.log( results ); // res.json(results); res.render('list', { data:results }); }) });
稍微解释下async.parallel的功能,下节我们会详细的讲解。 async.parallel([f1, f2, f3,…, fn], fb); 是f1到fn所有的异步都执行完了就会执行fb函数。这里我们是主题的详情和对主题的回复都请求完成了,就可以调用模板渲染。
// views/list.ejs <p><a href="https://www.jb51.net/" >返回到首页</a></p> <h1>详情</h1> <p>标题: <%=data[0].title %></p> <div><%=data[0].content %></div> <div> <h2>评论</h2> <div> <table> <% for(var i=0, len=data[1].length; i<len; i++) { %> <tr> <td><%=(i+1) %></td> <td><%=data[1][i].content %></td> <td><%=data[1][i].createtime %></td> </tr> <% } %> </table> </div> </div>
对主题的回复功能可以自己实现一下。
总结
写着写着就发现篇幅这么大了,而且充斥了大量的代码,需要我们细心的理解。下面给出详细的示例代码,大家可以下载学习,希望本文的内容对大家能有所帮助。
下载地址:点击这里
您可能感兴趣的文章: