• node+ajax实战案例(2)


    2.静态资源渲染

    2.1.创建http服务器

    var http = require('http');
    var url = require('url');
    var app = http.createServer(function (req, res) {
        var url_obj = url.parse(req.url);
        if(url_obj.pathname === '/'){
            res.write('hello world');
            res.end();
        }
    })
    app.listen(3000)
    

    2.2.根据请求的文件类型返回不同的文件内容

    首先,我们可以先返回一个html文件,在项目目录下去新建一个template的文件夹,在template文件夹下新建index.html和login.html的文件,分别写入一些测试代码 index.html文件内容

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>欢迎来到首页</h1>
    <a href='/login.html'>去登录</a>
    </body>
    </html>
    

    login.html文件内容

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>欢迎来到登录页</h1>
    </body>
    </html>
    

    现在我们需要根据访问的文件返回不同的内容,例如:访问http://localhost:3000/index.html 返回template下面index.html文件的内容,同理 访问http://localhost:3000/login.html, 就要返回template目录下login.html文件的内容,按照我们以前讲过的方法,在node后台程序中,我们可以为每个请求写一个路由,例如这样:

    var http = require('http');
    var url = require('url');
    var fs = require('fs');
    var app = http.createServer(function (req, res) {
        var url_obj = url.parse(req.url);
        if(url_obj.pathname === '/'){
            //这里返回默认的index.html文件内容
           fs.readFile('./template/index.html', 'utf-8', function (err, data) {
                if(!err){
                    res.write(data, 'utf-8');
                }
                res.end();
            })
        }
        if(url_obj.pathname === '/login.html'){
            //这里返回默认的index.html文件内容
           fs.readFile(path, 'utf-8', function (err, data) {
                if(!err){
                    res.write(data, 'utf-8');
                }
                res.end();
            })
        }
        //思考: 如果有100个网页怎么办呢?
    })
    app.listen(3000)
    

    从上面的代码中我们可以发现,当如果随着网页增多,文件类型增多(例如:css文件、图片文件),当请求变多而且请求的文件类型比较复杂的时候,我们每个文件名写一个if判断就显得不智能了,这个时候,我们需要让程序更加灵活,要让程序更加灵活,先要明白我们返回数据到浏览器的几个步骤:

    1 服务器要解析前端发过来的请求地址

    2 根据这个请求地址去确定服务器端文件的路径

    3 根据文件路径去读取文件内容,返回给浏览器

    在这几个步骤中,我们只需要把第2步改灵活就可以了,也就是要达到这样的要求:不管你请求的是什么地址,我都能去确定文件的路径(查找到文件),如果找不到文件,就可以给你返回一个找不到的页面

    核心点分析完成后,我们来实现这块代码

    var http = require('http');
    var url = require('url');
    var app = http.createServer(function (req, res) {
        // 解析url
        var url_obj = url.parse(req.url);
        // 拼接请求中的文件地址
        var path = './template/'+url_obj.pathname
        // 读取文件内容 返回
        fs.readFile(path, 'binary', function (err, data) {
            if(!err){
            res.write(data, 'binary');
            }
            res.end();
        })
    })
    app.listen(3000)
    

    代码改进后我们发现一个问题,那就是如果请求的时候不写文件类型,例如:"/", "/login",这个时候就没有办法找到对应的文件了,这个时候我们就需要手动去改一些我们自己定义的请求配置,例如:访问"/"的时候,我们默认返回index.html页面

    var http = require('http');
    var url = require('url');
    var app = http.createServer(function (req, res) {
        // 解析url
        var url_obj = url.parse(req.url);
        // 拼接请求中的文件地址
        var path = './template/'+url_obj.pathname
    
        // “/” 返回index.html页面
        if(url_obj.pathname === "/"){
            // 读取文件内容 返回
            fs.readFile('./template/index.html', 'binary', function (err, data) {
                if(!err){
                res.write(data, 'binary');
                }
                res.end();
            })
        }
        // 读取文件内容 返回
        fs.readFile(path, 'binary', function (err, data) {
            if(!err){
            res.write(data, 'binary');
            }
            res.end();
        })
    })
    app.listen(3000)
    

    这个时候我们发现 读取文件内容返回 这段代码重复写了,于是我们就可以把它封装成函数,只需要每次调用这个函数就可以了,因此,我们的代码还可以优化

    var http = require('http');
    var url = require('url');
    var app = http.createServer(function (req, res) {
        // 解析url
        var url_obj = url.parse(req.url);
        // 拼接请求中的文件地址
        var path = './template'+url_obj.pathname
    
        // “/” 返回index.html页面
        if(url_obj.pathname === "/"){
            // 读取文件内容 返回
            render("./template/index.html", res);
        }
        //请求哪个文件就返回哪个文件内容
        render(path, res)
    })
    app.listen(3000)
    
    
    //输入文件路径,返回给前端
    
    function render(path,res){
        fs.readFile(path, 'binary', function (err, data) {
            if(!err){
            res.write(data, "binary");
            }
            res.end();
        })
    }
    

    2.3.加载已经写好的静态模版文件

    模版文件下载地址:点击下载ajax+node案例静态文件

    螺钉课堂视频课程地址:http://edu.nodeing.com

  • 相关阅读:
    并查集模板
    css margin 负值 合并盒子边框线
    滑动门原理
    精灵图制作
    css 单行文本超出用 省略号表示...
    css vertical-align 垂直对齐 解决图片空白缝隙
    css 鼠标样式 取消input 框 轮廓线 防止用户拖拽文本域
    css 显示与隐藏
    css 圆角矩形用法
    css 定位详解
  • 原文地址:https://www.cnblogs.com/dadifeihong/p/12033409.html
Copyright © 2020-2023  润新知