SoFunction
Updated on 2025-03-10

Overview of request routing for nodejs

Generally speaking, the server should have different responses for different URL requests. We need to provide the requested URL and other required GET and POST parameters for the route, and then the route needs to execute the corresponding code based on this data. All the data we need is included in the request object, which is passed as the first parameter of the onRequest() callback function. In order to parse this data, additional modules need to be called, namely the url and querystring modules.
 
URL:This
 module has utilities for URL resolution and parsing. Call require('url') to
 use it.
 
Parsed URL objects have some or all of the following fields, depending on whether or not they exist in the URL string. Any parts that are not in the URL string will not be in the parsed object. Examples are shown for the URL
 
'http://user:pass@:8080/p/a/t/h?query=string#hash'
 
href: The full URL that was originally parsed. Both the protocol and host are lowercased.
Example: 'http://user:pass@:8080/p/a/t/h?query=string#hash'
 
protocol: The request protocol, lowercased.
Example: 'http:'
 
host: The full lowercased host portion of the URL, including port information.
Example: ':8080'
 
auth: The authentication information portion of a URL.
Example: 'user:pass'
 
hostname: Just the lowercased hostname portion of the host.
Example: ''
 
port: The port number portion of the host.
Example: '8080'
 
pathname: The path section of the URL, that comes after the host and before the query, including the initial slash if present.
Example: '/p/a/t/h'
 
search: The 'query string' portion of the URL, including the leading question mark.
Example: '?query=string'
 
path: Concatenation of pathname and search.
Example: '/p/a/t/h?query=string'
 
query: Either the 'params' portion of the query string, or a querystring-parsed object.
Example: 'query=string' or {'query':'string'}
 
hash: The 'fragment' portion of the URL including the pound-sign.
Example: '#hash'
 
We will use dependency injection to add the routing module more loosely. The function that is the routing target is called a request handler. The implementation of the request handler requires creating a module called requestHandlers, which can of course be named other. And for each request handler, add a placeholder function, and then export these functions as module methods, so that the request handler and routing module can be connected to the route, so that the route can be routed.
 
It is particularly noted that a series of request handlers need to be passed through an object here, and the object needs to be injected into the route() function using a loosely coupled method.