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/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/substr

// 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没有权限

目录
相关文章
|
7月前
|
JavaScript 前端开发
在Node.js中,如何合理使用模块来避免全局变量的问题?
在Node.js中,如何合理使用模块来避免全局变量的问题?
281 71
|
7月前
|
JavaScript 前端开发 开发者
Node学习笔记:HTTP模块
总的来说,Node.js的HTTP模块是一个强大的工具,可以帮助你处理HTTP协议的各种需求。无论你是想开设自己的餐厅(创建服务器),还是想去别的餐厅点菜(发出请求),HTTP模块都能满足你的需求。
256 18
|
8月前
|
人工智能 搜索推荐 程序员
用 Go 语言轻松构建 MCP 客户端与服务器
本文介绍了如何使用 mcp-go 构建一个完整的 MCP 应用,包括服务端和客户端两部分。 - 服务端支持注册工具(Tool)、资源(Resource)和提示词(Prompt),并可通过 stdio 或 sse 模式对外提供服务; - 客户端通过 stdio 连接服务器,支持初始化、列出服务内容、调用远程工具等操作。
1917 4
|
9月前
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
672 17
|
9月前
|
网络协议 开发者 Python
Socket如何实现客户端和服务器间的通信
通过上述示例,展示了如何使用Python的Socket模块实现基本的客户端和服务器间的通信。Socket提供了一种简单且强大的方式来建立和管理网络连接,适用于各种网络编程应用。理解和掌握Socket编程,可以帮助开发者构建高效、稳定的网络应用程序。
467 10
|
11月前
|
存储 开发工具 git
[Git] 深入理解 Git 的客户端与服务器角色
Git 的核心设计理念是分布式,每个仓库既可以是客户端也可以是服务器。通过 GitHub 远程仓库和本地仓库的协作,Git 实现了高效的版本管理和代码协作。GitHub 作为远程裸仓库,存储项目的完整版本历史并支持多客户端协作;本地仓库则通过 `.git` 文件夹独立管理版本历史,可在离线状态下进行提交、回滚等操作,并通过 `git pull` 和 `git push` 与远程仓库同步。这种分布式特性使得 Git 在代码协作中具备强大的灵活性和可靠性。
[Git] 深入理解 Git 的客户端与服务器角色
|
JavaScript
使用Node.js创建一个简单的Web服务器
使用Node.js创建一个简单的Web服务器
|
12月前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
2616 16
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
273 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器

热门文章

最新文章