node.js使用http模块创建服务器和客户端完整示例

Node.js是一个基于Chrome V8 JavaScript引擎构建的服务器端JavaScript环境,它能够运行JavaScript并且具有在Node.js环境下提供HTTP服务的能力。使用Node.js的http模块,我们可以轻松地创建HTTP服务器和客户端。下面是使用http模块创建服务器和客户端的完整攻略。

创建HTTP服务器

使用Node.js的http模块可以轻松地创建HTTP服务器。下面是基本的HTTP服务器代码:

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
});

server.listen(3000, () => {
  console.log(`Server running at http://localhost:3000/`);
});

上面的代码会监听3000端口,并在用户通过浏览器访问http://localhost:3000/时返回“Hello World”字符串。

这里的createServer函数会创建一个新的HTTP服务器,并在每次请求到达服务器时执行回调函数。回调函数接受两个参数reqres,代表请求和响应。在回调函数中,我们可以使用res对象来设置响应头和响应体,并调用end方法结束响应。

创建HTTP客户端

使用Node.js的http模块也可以轻松地创建HTTP客户端。下面是基本的HTTP客户端代码:

const http = require('http');

const options = {
  hostname: 'www.google.com',
  port: 80,
  path: '/',
  method: 'GET'
};

const req = http.request(options, (res) => {
  console.log(`STATUS: ${res.statusCode}`);
  console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
  res.setEncoding('utf8');
  res.on('data', (chunk) => {
    console.log(`BODY: ${chunk}`);
  });
  res.on('end', () => {
    console.log('No more data in response.');
  });
});

req.on('error', (e) => {
  console.error(`problem with request: ${e.message}`);
});

req.end();

上面的代码会向www.google.com发送一个HTTP GET请求,并打印出响应的状态码、响应头和响应体。

这里的request函数会创建一个新的HTTP请求,并接受一个包含请求选项的对象。在请求选项中,我们需要指定请求的方式、目标主机名、端口号、路径等等。request函数会返回一个http.ClientRequest对象,我们可以通过监听这个对象的事件来获取响应数据。

示例说明

以上是创建HTTP服务器和客户端的基本代码示例,实际上我们可以根据需要来添加相关的业务逻辑。下面是两个示例说明:

示例一:使用Http模块创建一个简单的RESTful API服务器

const http = require('http');

const server = http.createServer((req, res) => {
  const { method, url } = req;
  res.setHeader('Content-Type', 'application/json');
  if (method === 'GET' && url === '/user') {
    res.statusCode = 200;
    res.end(JSON.stringify({ name: 'Alice', age: 20 }));
  } else if (method === 'POST' && url === '/user') {
    let body = '';
    req.on('data', (chunk) => {
      body += chunk.toString();
    });
    req.on('end', () => {
      res.statusCode = 201;
      res.end(`User ${JSON.parse(body).name} created successfully.`);
    });
  } else {
    res.statusCode = 404;
    res.end(JSON.stringify({ error: 'Route not found' }));
  }
});

server.listen(3000, () => {
  console.log(`Server running at http://localhost:3000/`);
});

上面的代码会创建一个简单的RESTful API服务器,在/user路径下支持GET和POST请求。GET请求会返回一个预设的用户信息JSON,POST请求则是接收一个JSON格式的用户信息,并返回创建成功的提示语。如果请求的路径不存在,则返回404错误。可以通过curl命令或Postman等工具进行测试。

示例二:使用Http模块创建一个简单的Websocket服务器

const http = require('http');
const WebSocket = require('ws');

const server = http.createServer();
const wss = new WebSocket.Server({ server });

wss.on('connection', (socket) => {
  console.log('Websocket connected.');
  socket.on('message', (message) => {
    console.log(`Received message: ${message}`);
    socket.send(`Server receives message: ${message}`);
  });
  socket.on('close', () => {
    console.log('Websocket closed.');
  });
});

server.listen(3000, () => {
  console.log(`Websocket server running at http://localhost:3000/`);
});

上面的代码会创建一个简单的Websocket服务器,监听在3000端口。在客户端与Websocket服务器建立连接之后,服务器会发送一条连接成功的提示,并接收到客户端发来的消息,并将消息原封不动地返回给客户端。可以通过浏览器自带的Websocket工具或者socket.io等工具测试。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js使用http模块创建服务器和客户端完整示例 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 老生常谈php 正则中的i,m,s,x,e分别表示什么

    在PHP正则表达式中,i、m、s、x和e是修饰符,用于改变正则表达式的匹配行为。下面是每个修饰符的详细解释: i修饰符(不区分大小写):i修饰符用于使正则表达式在匹配时不区分大小写。例如,正则表达式/hello/i将匹配\”Hello\”、\”hello\”和\”HELLO\”等字符串。 示例1: <?php $pattern = ‘/hello/i’…

    other 2023年8月18日
    00
  • C语言单向链表的表示与实现实例详解

    C语言单向链表的表示与实现实例详解 介绍 单向链表是一种常见的数据结构,它由若干个节点构成,每个节点包含一个数据域和一个指向下一个节点的指针。单向链表通常用于需要频繁插入、删除节点的场景,如操作系统的进程调度、内存管理等。 本文将介绍C语言中单向链表的表示和实现,包括链表的定义、插入节点、删除节点等操作。 链表的定义 在C语言中,链表通常由一个结构体表示,该…

    other 2023年6月27日
    00
  • linux之jq

    Linux之jq的完整攻略 jq是一个命令行工具,用于处理JSON格式的数据。它可以帮助用户快速地查询、过滤、转换和格式化JSON数据。本文将详细讲解jq的使用方法,并提供两个示例说明。 1. 安装jq 在Linux系统中,可以使用以下命令安装jq: sudo apt-get install jq 2. jq的基本用法 2.1 查询JSON数据 可以使用jq…

    other 2023年5月9日
    00
  • ExtJS5搭建MVVM框架

    ExtJS5搭建MVVM框架的完整攻略 MVVM是一种前端架构模式,它将应用程序分为三个部分:模型(Model)、视图(View)和视图模型(ViewModel)。在ExtJS5中,我们可以使用MVVM框架来搭建一个可扩展、可维护的前端应用程序。本文将详细介绍如何使用ExtJS5搭建MVVM框架,并提供两个示例说明。 MVVM框架的基本概念 在MVVM框架中…

    other 2023年5月5日
    00
  • Restart.vbs源代码可以重启远程电脑的vbs

    首先,需要说明一下,直接通过代码重启远程电脑并不是一个安全的做法。因此,在使用此代码前,应该谨慎考虑,并且确保自己已经得到了充分的授权和权限。在此前提下,我们提供一份完整的攻略。 1. 了解 Restart.vbs 原理: 首先,Restart.vbs 是一种 VBScript 脚本,可以使得以下语句可用: CreateObject("WScrip…

    other 2023年6月27日
    00
  • 华为发布EROFS文件系统 安卓卡慢病根能根治吗

    介绍 在今年 3 月 5 日的华为发布会上,华为宣布推出的的全新存储文件系统 EROFS,称它可以把安卓卡慢病根治。那么我们该如何使用这个新的文件系统呢?接下来就为大家详细讲解使用 EROFS 文件系统的攻略。 什么是 EROFS? EROFS 是 Enhanced Read-Only File System 的缩写,它是华为针对安卓系统推出的一款新型的存储…

    other 2023年6月27日
    00
  • 最常用的java库一览

    当然,我很乐意为您提供最常用的Java库一览的攻略。以下是详细的步骤和示例: 步骤1:了解Java库 Java是一组可重用的代码,可以帮助Java开发人员快速开发应用程序。Java通常包含各种类和方法,可以各种任务,例如字符串处理、网络编程、图形用户界面等。 步骤2:了解最常用的Java库 以下是最常用的Java库一览: Java标准库:Java标准库是Ja…

    other 2023年5月6日
    00
  • iOS开发中使用UIScrollView实现图片轮播和点击加载

    下面我来详细讲解“iOS开发中使用UIScrollView实现图片轮播和点击加载”的完整攻略。 简介 UIScrollView是iOS中常见的一个控件,用于在屏幕上显示可滚动内容的视图。在iOS开发中,我们经常使用UIScrollView实现图片轮播和点击加载功能。 实现图片轮播 步骤一:创建UIScrollView和UIImageView 首先,我们需要在…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部