美文网首页让前端飞Web前端之路
我们一起从零开始学node吧---(2)

我们一起从零开始学node吧---(2)

作者: 小鳄鱼的大哥哦 | 来源:发表于2019-08-26 18:39 被阅读0次

    上一周,我们简单的服务器已经启动了,那么可以更进一步了。

    渲染页面

    我们访问页面时的本质都是服务端的一个路由,那么我们现在就先来写一个/login的路由

    先来看路由,我们在index.js里添加这段代码

    router.get('/login', function(req, res) {
        res.end('login page');
    });
    

    ok,启动服务node index.js,访问http://localhost:8888/login,就可以看到效果

    路由创建好了,怎么返回一个html页面呢,就要用到模板引擎

    ejs

    ejs是比较火的一个模板引擎,和express集成良好。不知道什么是模板引擎的,参考vue的写法,模板引擎会将页面中的某个字符串渲染成数据再返回出来

    ejs中文文档

    工具有了,怎么集成到我们的项目中呢?

    • 在根目录下创建views文件夹
    • 在views中创建一个文件login.ejs,其代码如下
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title>登录</title>
        <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
            integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    
        <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"
            integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
            crossorigin="anonymous"></script>
    
        <style>
            .container {
                width: 500px;
            }
        </style>
    </head>
    
    <body>
        <div class="container">
    
            <form class="form-signin" action="/login" method="POST">
                <h2 class="form-signin-heading"><%= name %></h2>
                <div class="form-group">
                    <label for="exampleInputEmail1">账号</label>
                    <input name="userName" type="text" class="form-control" id="exampleInputEmail1" placeholder="账号" required>
                </div>
                <div class="form-group">
                    <label for="exampleInputPassword1">密码</label>
                    <input name="password" type="password" class="form-control" id="exampleInputPassword1" placeholder="密码" required>
                </div>
                <div class="checkbox">
                    <label>
                        <input type="checkbox" value="remember-me">记住密码
                    </label>
                </div>
                <button class="btn btn-lg btn-primary btn-block" type="submit">登录</button>
            </form>
    
        </div>
    </body>
    
    </html>
    
    • 这只是个普通的html文件的代码格式而已,ejs的语法如下
    类似vue{{}}的写法,ejs发现这种格式的代码,然后会去寻找服务端的传入的name字段,招到name之后会把它转成字符串展示出来
    <%= name %>
    
    • 我们在index.js里添加这段代码
    var path = require('path');
    app.set('views', path.join(__dirname, 'views')); // 设置存放模板文件的目录
    app.set('view engine', 'ejs'); // 设置模板引擎为 ejs
    
    • 引擎配置好了,怎么在路由里返回对应的页面呢,在index.js中修改login的路由方法
    router.get('/login', function(req, res) {
      // render方法可以返回一个页面
      // 参数1: 文件名,我们在index.js中配置了引擎目录的路径为views文件夹,这里会去找views下面的login.ejs
      //参数2:往该ejs中传入的数据,该数据可以在对应的ejs中通过<%= 字段名 %>拿到
       res.render('login', {
            name: '登录页面'
        });
    });
    

    所有文件都配置好后,打开http://localhost:8888/login

    image.png

    页面已经返回出来了,其实这也是我们时常听说的服务端渲染,也就是通过服务器返回页面,页面中的数据跟随页面同步渲染,这种方式虽然影响用户体验(同步加载大量数据情况下,页面会白屏一段时间),不过方便爬虫爬取数据和做seo

    基本的页面展示以及OK了,下次就做表单提交和错误处理吧...

    荆轲刺秦王...

    相关文章

      网友评论

        本文标题:我们一起从零开始学node吧---(2)

        本文链接:https://www.haomeiwen.com/subject/uibdectx.html