nodejs个人网站搭建经验分享——路由规则设计(1)
寒假在某公司实习,做nodejs平台下的web开发。初次学习nodejs的我感觉这个小东西真的是潜力无穷。用nodejs来做服务器端的平台,代码量很少,却又有强大多样的模块支持。于是我打算用业余时间搭建一个个人网站。此连载文章用于与大家交流经验,分享所得。
本人的个人网站采用nodejs平台的express框架与MYSQL数据库。网页前端UI使用了网上开源的bootstrap框架。
express版本为4.11.0。
网站大体由三个主要页面组成:blogs, projects, contact
blogs页面显示每个文章的第一段。点进文章之后的页面叫article
外加隐藏的login界面用于管理员的登录。
网站的路由初步规划是这样的:
‘/’与’/blogs’路径请求使用blog.ejs文件进行渲染。
‘/login’, ‘/project’, ‘/contact’三个路径请求分别使用login.ejs, project.ejs, contact.ejs三个文件进行渲染。
‘/blogs/articla/:articleNum’路径请求使用article.ejs文件进行渲染。articleNum变量代表每个博客文章的id。
projects页面目前还没有进行设计。
blogs.ejs中,用于显示每个缩略文章的html代码如下:
<div class=‘blog-container‘>
<div class=‘row‘>
<div class=‘col-lg-3‘>
<h5 class=‘text-center‘><%= blogsArray[i][‘blog_time‘].toUTCString() %></h5>
<h5 class=‘text-center‘>Readings: <%= blogsArray[i][‘blog_reading_number‘] %></h5>
<h5 class=‘text-center‘>Author: <%= blogsArray[i][‘blog_author‘] %></h5>
</div>
<div class=‘col-lg-9‘>
<a href=<%= ‘/blogs/article/‘ + blogsArray[i][‘blog_id‘] %>><h3><%= blogsArray[i][‘blog_title‘] %></h3></a>
<% var textArr = blogsArray[i][‘blog_content‘].split(/(?:\r\n|\r|\n)/g); %>
<p><%= textArr[0] %></p>
<% if (textArr.length > 1)
{ %>
<a href=<%= ‘/blogs/article/‘ + blogsArray[i][‘blog_id‘] %>>Read more...</a>
<% } %>
</div>
</div>
</div>
其中前面部分的三个<%=...%>
代表的是模板变量,我们现不管它,我们看标签部分,href
为‘/blogs/article/‘
与blogsArray[i][‘blog_id‘]
相连组成一个新的url
。在express的app.js中,关于这部分的代码如下所示:
app.get(‘/blogs/article/:blog_id‘, function(req, res, next)
{
connection.query(‘select * from blogs where blog_id = ‘ + req.params.blog_id, function(err, result)
{
if (err)
{
alert(‘Cannot get article‘);
}
else
{
res.article = result;
}
next()
})
})
在路由控制的index.js中我使用如下代码:
router.get(‘/blogs/article/:articleNum‘, function(req, res, next) {
res.render(‘article‘,{
blog: ‘active‘,
projects: ‘‘,
contact: ‘‘,
admin: req.session.admin,
article: res.article
});
});
这段代码指出当获取到/blogs/article/:articleNum
请求时使用article
文件进行渲染,并设置article
变量传递从数据库调出的文章数据。数据库的设计我会在后面详细介绍。用于存储文章的表由以下6个字段组成:
blog_id int not null auto_increment
blog_time datetime not null
blog_title mediumtext not null
blog_content longtext not null
blog_reading_number int not null
blog_author mediumtext not null
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。