zoukankan      html  css  js  c++  java
  • node服务器

    <body style="background:rgba(90, 122, 134, 0.35);"></body>

    markdown support

    HTTP服务器

    一、服务器基本方法

    "use strict";
    
    // 1.加载http模块
    const http = require('http');
    
    // 2.通过http核心模块暴露的createsever方法创建一个服务实例
    const sever = http.createSever();
    
    // 3.给服务器添加监听客户端请求的处理函数
    // 每当接受客户端的请求,那么就会触发该事件,执行绑定的回调函数
    // 当服务器接收到客户端请求之后,会将客户端的请求报文数据解析为一个
    sever.on('request',(req,res) => {
        // req就是客户端发送的请求报文中的请求头部分
        // message.headers
    });
    
    // 4.开启服务器,设置一个监听的端口
    // 要监听的端口号
    // 允许通过那个IP地址进行访问
    // 开启监听的需要时间,在回调函数里输出自定义信息
    sever.listen(3000,'127.0.0.1',() => {
        
    });
    

    二、实现一个静态资源服务器

    实现步骤

    • 定义严格模式,并引用模块
      • 文件fs模块
      • 路径path模块
      • http模块
    • 创建服务器http.createSever((req,res) => {}).listen(3000,'127.0.0.1');
      • 客户端请求的路径:req.url;
      • 得到用户的请求的绝对路径:path.join(__dirname,url);
      • 利用获取的路径作为文件名读取文件fs.readFile(absPath,(err,data) => {});
        • 调用函数,向客户端发送数据类型
        res.writeHead(200, {
            'Content-Type': mime;````
        });
        
        • 发送数据,结束响应 : res.end(data);
    • 通过扩展名获取请求头的格式(自定义函数部分)
    "use strict";
    
    const http = require('http');
    const fs = require('fs');
    const path = require('path');
    
    http.createSever((req,res) => {
        // 客户端请求的url路径
        let url = req.url;
    
        // 如果用户的请求路径中没有点,那么给它返回一个默认的页面
        if (!url.includes('.')) {
            url = 'index.html';
        }
    
        // 得到用户的请求的绝对路径
        let absPath = path.join(__dirname,url);
    
        <!-- res.write(absPath);    // 第一个参数必须是字符串类型 
        res.end(); -->
        // end之后,本次相应彻底结束,链接断开
        
        <!-- res.end(absPath); -->  // 相当于上述俩句代码
    
    
        fs.readFile(absPath,(err,data) => {
            if(err) {
                return res.end(err.message);
            }
    
            // 读取文件,解析json,然后根据对应的扩展名,找到对应的mime Content-Type
            getContentTypeByEXTName(path.extname(absPath),(err,mine) => {
                if(err) {
                    return res.end(err.message);
                }
    
                // 向客户端发送数据类型的时候,要根据文件的扩展名
                res.writeHead(200, {
                    'Content-Type': mime;
                });
    
                // 发送数据,结束响应
                res.end(data);
            });
        })
    
    }).listen(3000,'127.0.0.1');
    
    // 自定义函数
    function getContentTypeByEXTName(extName,callback){
        fs.readFile(path.join(__dirname,'mine.txt'),'utf8',(err,data) => {
            if(err) {
                return callback(err,null);
            }
    
            try{
                let jsonObj = JSON.parse(data);
                callback(null,jsonObj[extName] ? jsonObj[extName] : 'text/plain');
            } catch (e) {
                callback(e, null);
            }
        });
    }
    

    三、后端模板字符串(art-template)

    1.跨页面

    html页面部分

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>art-template</title>
    </head>
    <body>
     {{each list as value i}}
        <tr>
          <td><a class="icon dir" href="/{{value}}">{{value}}/</a></td>
          <td class="detailsColumn"></td>
          <td class="detailsColumn">16/2/7 下午5:11:54</td>
        </tr>
      {{/each}}
    </body>
    </html>
    

    js页面部分

    "use strict";
    // 获取template文件
    const template = require('art-template');
    const fs = require('fs');
    const path = require('path');
    
    // 文件读取,获取数据
    fs.readFile(path.join(__dirname,'index.html'),'utf8',(err,data) => {
        if (err) {
            return res.end(err.message);
        }
    
        // 编译模板,我们在这儿是把文件整体作为一个模板字符串了
        let compileFunc = template.render(data);
    
        // 向模板中注入数据,得到完整的html字符串
        let htmlStr = compileFunc({
            list: contents       // contents为替换的内容数组
        });
    
        // 向客户端发送响应头部字段,告诉客户端本次响应的数据是什么类型
        res.writeHead(200, {
            'Content-Type': 'text/html; charset=utf-8'
        });
    
        // 发送数据,也叫作响应数据
        res.end(htmlStr);
    })
    
    

    2.node.js单页面


    arr[arr.length] = item;
    arr.push(item);

  • 相关阅读:
    多线程——Thread与Runnable的区别(28)
    多线程——Runnable接口实现多线程(27)
    多线程——调用start()方法与直接调用run()方法的区别
    动态规划---优化编辑器问题(计算字符串距离)
    网易2017春招笔试真题编程题集合(4)——消除重复元素
    网易2017春招笔试真题编程题集合(3)——调整队形
    网易2017春招笔试真题编程题集合(2)——赶去公司
    网易2017春招笔试真题编程题集合(1)——双核处理
    Delphi2010安装win10不能编译问题
    数据类型转换byteushotint64(long)
  • 原文地址:https://www.cnblogs.com/jwen/p/5418798.html
Copyright © 2011-2022 走看看