node.js中路由,中间件,get请求和post请求的参数详解

yizhihongxing

这里给出一个完整的攻略,分为以下几个方面:

路由

路由(Routing)是实现不同URL请求的分发处理,将不同的请求分配到对应的处理程序中,以便实现特定的功能。

在Node.js中,路由可以使用自带的模块http中的createServer方法来实现,通过request对象中的urlmethod属性可以获取当前请求的URL和请求方法,并根据不同的URL和请求方法进行分配到对应的处理程序。例如:

const http = require('http');

function router(request, response) {
  // 获取请求的URL和请求方法
  const url = request.url;
  const method = request.method;

  // 根据URL和请求方法分配到不同的处理程序
  if (url === '/' && method === 'GET') {
    // 处理GET请求并返回响应
    response.writeHead(200, {'Content-Type': 'text/html'});
    response.end('<h1>Hello, world!</h1>');
  } else {
    // 处理未定义的路由
    response.writeHead(404, {'Content-Type': 'text/html'});
    response.end('<h1>404 Not Found</h1>');
  }
}

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

我们设置两个路由:

  • 根路由:'/',GET请求,返回Hello, world!
  • 未定义的路由:其他请求,返回404 Not Found

这里有一个示例2中的路由设置到一个Express应用程序中。

const express = require('express');
const app = express();
const router = express.Router();

// 根路由
router.get('/', (req, res) => {
  res.send('<h1>Hello, world!</h1>');
});

// 未定义的路由
router.all('*', (req, res) => {
  res.status(404).send('<h1>404 Not Found</h1>');
});

app.use(router);

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

使用Express的路由器(Router)类,我们通过router.getrouter.all方法分别设置了根路由和未定义的路由,二者分别对应了Node.js中的根路由和未定义路由的处理逻辑。

中间件

中间件(Middleware)是指在请求和响应之间进行一系列处理的函数。这些函数封装了对请求和响应的处理逻辑,可以用来完成诸如日志记录、请求处理、权限验证等诸多功能。

在Node.js中,中间件可以使用自带的模块http中的createServer方法来实现,通过使用request对象中的urlmethod属性进行请求和响应的处理。例如:

const http = require('http');

function logger(request, response, next) {
  const date = new Date().toISOString();
  console.log(`[${date}] ${request.method} ${request.url}`);
  next();
}

function hello(request, response) {
  response.writeHead(200, {'Content-Type': 'text/html'});
  response.end('<h1>Hello, world!</h1>');
}

http.createServer((request, response) => {
  logger(request, response, () => {
    hello(request, response);
  });
}).listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

我们定义了两个中间件:

  • logger:打印请求时间、请求方法和请求URL,然后交给下一个中间件或路由进行处理;
  • hello:返回响应Hello, world!

这个示例2中的中间件将输出到控制台一条日志信息,指示所有HTTP方法和对应的URL。使用了morgan中间件(记录请求日志)。这个中间件将捕获每个HTTP请求的IP地址、HTTP方法、请求URL、查询字符串,处理时间和响应的状态。最后,它将把这个日志消息打印到控制台:

const express = require('express');
const morgan = require('morgan');
const app = express();

app.use(morgan('dev'));

app.get('/', (req, res) => {
  res.send('<h1>Hello, world!</h1>');
});

app.all('*', (req, res) => {
  res.status(404).send('<h1>404 Not Found</h1>');
});

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

这个示例中使用了morgan中间件,并通过app.use方法将中间件集成到Express应用程序中。这个中间件定义了记录请求日志的规范配置('dev')。它将捕获每个HTTP请求的IP地址、HTTP方法、请求URL、查询字符串,处理时间和响应的状态。最后,它将把这个日志消息打印到控制台。

GET请求

在Node.js中,处理GET请求可以使用http模块的createServer方法和request对象的url属性来获取请求的URL,通过URL参数来获取请求此的参数,例如querystring模块的parse方法可以将URL参数解析成对象的形式,然后进一步进行处理。例如:

const http = require('http');
const querystring = require('querystring');

function router(request, response) {
  const url = request.url;

  if (url.indexOf('/api/data') === 0) {
    // 获取URL中的参数
    const query = url.split('?')[1];
    const params = querystring.parse(query);

    // 返回处理结果
    response.writeHead(200, {'Content-Type': 'application/json'});
    response.end(JSON.stringify({
      code: 0,
      message: 'Success',
      data: params
    }));
  } else {
    response.writeHead(404, {'Content-Type': 'text/html'});
    response.end('<h1>404 Not Found</h1>');
  }
}

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

我们设置了一个路由'/api/data',GET请求,通过querystring模块的parse方法解析URL参数,并返回处理结果。

这里有一个示例2中的GET请求到一个Express应用程序中。

const express = require('express');
const app = express();

app.get('/api/data', (req, res) => {
  const params = req.query;

  res.json({
    code: 0,
    message: 'Success',
    data: params
  });
});

app.all('*', (req, res) => {
  res.status(404).send('<h1>404 Not Found</h1>');
});

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

使用Express的app.get方法设置路由,请求的参数可以通过req.query属性来获取,这个属性类似querystring模块的parse方法解析URL来获取参数。

POST请求

在Node.js中,处理POST请求需要使用http模块的createServer方法、request对象的on方法来绑定dataend事件,获取POST请求发送的数据,并进行处理。例如:

const http = require('http');
const querystring = require('querystring');

function router(request, response) {
  if (request.url.indexOf('/api/data') === 0 && request.method === 'POST') {
    let postData = '';

    // 通过监听data事件和end事件获取POST请求的数据
    request.on('data', chunk => {
      postData += chunk;
    });
    request.on('end', () => {
      // 将POST请求的数据解析成对象
      const params = querystring.parse(postData);

      // 返回处理结果
      response.writeHead(200, {'Content-Type': 'application/json'});
      response.end(JSON.stringify({
        code: 0,
        message: 'Success',
        data: params
      }));
    });
  } else {
    response.writeHead(404, {'Content-Type': 'text/html'});
    response.end('<h1>404 Not Found</h1>');
  }
}

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

我们设置了一个路由'/api/data',POST请求,通过request对象的on方法来绑定dataend事件,获取POST请求发送的数据,并通过querystring模块的parse方法解析POST请求的数据,然后返回处理结果。

这里有一个示例2中的POST请求到一个Express应用程序中。

const express = require('express');
const app = express();

app.use(express.json());
app.use(express.urlencoded({extended: false}));

app.post('/api/data', (req, res) => {
  const params = req.body;

  res.json({
    code: 0,
    message: 'Success',
    data: params
  });
});

app.all('*', (req, res) => {
  res.status(404).send('<h1>404 Not Found</h1>');
});

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

使用Express的app.post方法设置路由,需要在Express应用程序中使用express.jsonexpress.urlencoded中间件将POST请求的数据解析成对象。可以通过req.body属性来获取POST请求的参数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js中路由,中间件,get请求和post请求的参数详解 - Python技术站

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

相关文章

  • 多版本node的安装和切换详细操作步骤

    下面是多版本node的安装和切换详细操作步骤的完整攻略: 安装nvm nvm是管理node版本的工具,我们需要先安装它。以下步骤适用于MacOS和Linux系统,对于Windows系统请自行查找对应的安装方法。 打开终端或命令行界面,输入以下命令下载nvm安装脚本: curl -o- https://raw.githubusercontent.com/nvm…

    node js 2023年6月8日
    00
  • 详解Node.js如何处理ES6模块

    下面我来详细讲解“详解Node.js如何处理ES6模块”的完整攻略。 什么是ES6模块 ES6模块是一种在 JavaScript 中组织代码的标准方式,它可以帮助我们将代码分割到单独的文件中,以便更好地组织和管理代码。 ES6模块的一个主要特点是通过 import 和 export 关键字来定义模块之间的依赖和导出。在导入模块时,我们可以使用 import …

    node js 2023年6月8日
    00
  • 详解nodeJS之路径PATH模块

    详解Node.js之路径模块(Path module) 简介 在Node.js中,核心模块之一是路径模块(Path module)。该模块提供了处理和转换文件路径的工具方法。 使用方式 在Node.js中,我们可以使用require关键字导入路径模块。例如: const path = require(‘path’); 在导入模块后,我们可以使用该模块提供的方…

    node js 2023年6月8日
    00
  • JavaScript 的setTimeout与事件循环机制event-loop

    JavaScript 的 setTimeout 与事件循环机制 event-loop 是前端开发中比较重要的知识点之一,本篇文章将会提供一份完整攻略,以便更好地理解这两个概念。 setTimeout 简介 setTimeout 是 JavaScript 的一个函数,可以用来设置一个定时操作,表示在指定的延迟时间之后执行一段程序。setTimeout 语法如下…

    node js 2023年6月8日
    00
  • JavaScript设计模式之单例模式原理与用法实例分析

    JavaScript设计模式之单例模式原理与用法实例分析 什么是单例模式? 单例模式是一种经典的设计模式,它保证一个类只有一个实例并提供一个全局的访问点。在JavaScript中,单例模式可以用于创建唯一的全局对象。 单例模式的应用场景 单例模式的应用场景非常广泛,例如: 管理页面中的全局状态,例如Vue.js中的store 缓存数据,例如浏览器中的loca…

    node js 2023年6月8日
    00
  • 借助node实战JSONP跨域实例

    下面是“借助node实战JSONP跨域实例”的完整攻略。 简介 在前后端分离的开发模式下,比较常见的一种跨域方案是JSONP。JSONP的原理是通过动态创建一个script标签,让浏览器去请求一个跨域的资源,因为script标签的src属性能够跨域请求资源,服务器端就可以将需要返回的数据放在一段回调函数中返回,浏览器解析这段数据并执行回调函数,从而达到跨域的…

    node js 2023年6月8日
    00
  • Nodejs对postgresql基本操作的封装方法

    Node.js对PostgreSQL基本操作的封装方法可以通过以下步骤实现: 1. 安装依赖 在使用Node.js操作PostgreSQL之前,需要安装相应的依赖库。可以使用npm安装pg模块,它是Node.js对PostgreSQL操作的封装库。 npm install pg 2. 连接PostgreSQL数据库 在使用Node.js操作PostgreSQ…

    node js 2023年6月8日
    00
  • node.js版本管理工具n无效的原理和解决方法

    接下来我将详细讲解 “node.js版本管理工具n无效的原理和解决方法” 的攻略。 问题描述 在使用 node.js 版本管理工具 n 进行 node.js 版本管理时,有时会遇到以下问题: $ n 6.9.5 $ node n: command not found 或者: $ n 6.9.5 $ n use 6.9.5 /bin/sh: 1: node: …

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部