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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。