node web模块 (服务器端和客户端)

node web模块

web效劳器

web效劳器指网站效劳器,指驻留在因特网上的某种顺序,web阅读器的基础功能,供应信息阅读效劳
web支撑效劳器端的脚本语言,经由历程脚本语言从数据库猎取数据,将效果返回给客户端阅读器

web运用基础架构

Client => Server => Business => Data
Client 即客户端,经由历程http协定向效劳器提议要求
Server 效劳器端,指web效劳器,吸收客户端要求,并向客户端发送相应的数据
Business 即营业层,经由历程Web效劳器处置惩罚运用顺序,数据库的交互,逻辑运算,挪用外部顺序
Data 数据层,贮存数据

运用Node建立Web效劳器

运用http模块建立

须要运用substr()要领,一个从指定位置返回指定终了的要领,继续自String 末了一个参数可省
https://developer.mozilla.org…

// server.js
// 引入模块
var http = require('http');    // http模块
var fs = require('fs');        // fs 文件模块
var url = require('url');    // url 一致资本定位符模块

// 建立效劳器
http.createServer((request, response) => {
    // 剖析要求,保留进变量内
    var pathname = url.parse(request.url).pathname;

    // 输出要求的文件名
    console.log(pathname);

    // 从文件体系中读取文件,举行返回
    fs.readFile(pathname.substr(1), (err, data) => {    // 运用substr要领举行读取文件的字节,将文件名返回给回调函数
        if (err){    // 对毛病举行处置惩罚
            console.log(err);    // 打印出毛病
            // 返回一个404
            response.writeHead(404, {'Content-Type': 'text/html; charset=utf-8'});
            response.write("呀,什么都没有╮(╯_╰)╭");
            response.write('我猜你要的是 ' + data + ' ?');
            response.end();
        } else {
            // 返回 200
            response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
            // 返回文件内容
            response.write(data.toString());    // 将读取的文件内容举行字符串化,并举行输出
            response.end();    // 封闭衔接,发出数据
        };
    });
}).listen(1937);
// index.html
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>这是一个小Dome</title>
    </head>
    <body>
        <h1>hello word!</h1>
    </body>
</html>

接见 http://127.0.0.1:1937/index.html
涌现hello word完成!

PS C:\Users\mingm\Desktop\test> node Server.js
/index.html
/
/input.html
/
{ [Error: ENOENT: no such file or directory, open 'C:\Users\mingm\Desktop\test\input.html']
  errno: -4058,
  code: 'ENOENT',
  syscall: 'open',
  path: 'C:\\Users\\mingm\\Desktop\\test\\input.html' }

革新一点

接见/涌现404,申明没有设置首页,设置首页

    // 增加对首页的支撑,设置默认首页为index.html
    if (pathname === '/') {
        pathname = pathname + 'index.html';
    }

完成后的文件以下

// 引入模块
var http = require('http');    // http模块
var fs = require('fs');        // fs 文件模块
var url = require('url');    // url 一致资本定位符模块

// 建立效劳器
http.createServer((request, response) => {
    // 剖析要求,保留进变量内
    var pathname = url.parse(request.url).pathname;

    // 输出要求的文件名
    console.log(pathname);

    // 增加对首页的支撑,设置默认首页为index.html
    if (pathname === '/') {
        pathname = pathname + 'index.html';
    }

    // 从文件体系中读取文件,举行返回
    fs.readFile(pathname.substr(1), (err, data) => {    // 运用substr要领举行读取文件的字节,将文件名返回给回调函数
        if (err){    // 对毛病举行处置惩罚
            console.log(err);    // 打印出毛病
            // 返回一个404
            response.writeHead(404, {'Content-Type': 'text/html; charset=utf-8'});
            response.write("呀,什么都没有╮(╯_╰)╭");
            response.write('我猜你要的是&nbsp;' + data + '&nbsp;?');
            response.end();
        } else {
            // 返回 200
            response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
            // 返回文件内容
            response.write(data.toString());    // 将读取的文件内容举行字符串化,并举行输出
            response.end();    // 封闭衔接,发出数据
        };
    });
}).listen(1937);

运用node建立客户端

PS C:\Users\mingm\Desktop\test> node get.js
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

PS C:\Users\mingm\Desktop\test>
var http = require('http');

// 要求的选项
var options = {    // 建立一个对象保留相干数据
    host:'www.iming.info',    // 主机地点
    port:'443',    // 接见端口
    method:'GET',
    path:'/',    // 接见的文件
};

// 处置惩罚相应的回调函数
var callback = (response) => {
    // 更新数据
    var body = '';
    response.on('data', (data) => {        // 绑定事宜,data
        body += data;    
    });

    response.on('end', () => {    // 绑定end事宜
        console.log(body);    
    });
};

// 最先发送要求
var req = http.request(options, callback);    // 发送要求,options为发送要求的选项,callback为处置惩罚要求的回调函数,将会有抛出三个事宜一个data一个end,一个error,必须有end示意要求终了,封闭衔接
req.end();    // 封闭衔接

因为小站运用的是nginx的https,运用了证书,须要运用考证秘钥的历程,所以谢绝接见,302没有权限

    原文作者:小小____
    原文地址: https://segmentfault.com/a/1190000015797285
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞