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

yizhihongxing

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日

相关文章

  • 详解Mybatis是如何把数据库数据封装到对象中的

    详解Mybatis是如何把数据库数据封装到对象中的 Mybatis是一种Java持久层框架,它提供了一种将数据库数据封装到对象中的灵活方式。下面是Mybatis如何实现这一过程的详细攻略: 1. 配置数据库连接 首先,需要在Mybatis的配置文件中配置数据库连接信息,包括数据库驱动、连接URL、用户名和密码等。以下是一个示例: <configurat…

    other 2023年10月18日
    00
  • 百度音乐mac版怎么下载音乐 百度音乐mac下载地址

    百度音乐mac版下载音乐攻略 百度音乐是一款流行的音乐播放器和下载工具,它提供了丰富的音乐资源供用户在线收听和下载。以下是在Mac电脑上下载音乐的详细攻略。 步骤一:下载百度音乐mac版 首先,你需要下载并安装百度音乐的mac版。你可以通过以下步骤进行下载: 打开你的浏览器,访问百度音乐的官方网站。 在网站上找到并点击下载按钮,选择mac版进行下载。 下载完…

    other 2023年8月4日
    00
  • Win11右键点击和打开文件夹速度慢的解决方法

    下面是详细的Win11右键点击和打开文件夹速度慢的解决方法攻略: 问题描述 在 Win11 中,右键点击文件或文件夹时可能会出现卡顿、慢速甚至无法弹出的情况,同时打开文件夹也会出现类似情况,这极大地影响了电脑的使用体验。 解决方法 1. 清理无用的上下文菜单 右键点击文件或文件夹时弹出的上下文菜单,是由 Windows 操作系统中登记的各种文件类型关联所决定…

    other 2023年6月27日
    00
  • JavaScript实现从数组中选出和等于固定值的n个数

    下面是JavaScript实现从数组中选出和等于固定值的n个数的完整攻略: 问题描述 假设有一个数组arr和一个固定值target,如何从arr中选出n个数,使得这n个数的和等于target。 解决方案 1. 暴力破解 最简单粗暴的方法当然是暴力破解,即枚举所有的 n 个数的组合情况,计算它们的和,如果等于 target,则返回这个组合。但其时间复杂度为O(…

    other 2023年6月25日
    00
  • Pycharm导入Python包,模块的图文教程

    以下是PyCharm导入Python包和模块的图文教程的完整攻略: 打开PyCharm并创建一个新的Python项目。 在项目的根目录下创建一个新的Python文件。 在Python文件中,使用import关键字导入需要的包或模块。例如: python import numpy as np import pandas as pd PyCharm会自动检测导入…

    other 2023年10月14日
    00
  • ansible删除目录下所有内容的方法

    下面是详细讲解 “ansible删除目录下所有内容的方法”的完整攻略: 1. 使用file模块 Ansible中的file模块可以用于管理文件与目录,其中有一个子模块叫做“recurse”,可以用于递归删除目录下的所有文件。 示例1 – name: 删除目录下所有文件 file: path: /data/www/example.com/ state: abs…

    other 2023年6月26日
    00
  • C++学习之cstdbool和cstddef头文件封装源码分析

    接下来我会详细向你讲解 “C++学习之cstdbool和cstddef头文件封装源码分析” 的完整攻略: 目录 介绍 cstdbool头文件 cstddef头文件 示例说明 结论 介绍 本文主要介绍 C++ 中 cstdbool 和 cstddef 两个头文件的封装源码分析。cstdbool 头文件中主要定义了 bool 类型变量,而 cstddef 头文件…

    other 2023年6月25日
    00
  • 嵌入式移植docker报错问题(汇总)

    嵌入式移植Docker时,可能会遇到不少错误。本文将对一些常见的错误进行汇总及解决方法介绍,希望能帮助到大家。 一、问题1:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 这个问题通常是因为Docker daem…

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