À propos de Node.js®
En tant que moteur d'exécution JavaScript asynchrone orienté événements, Node.js est conçu pour construire des applications réseau évolutives. Dans l'exemple "hello world" suivant, de nombreuses connexions peuvent être gérées simultanément. À chaque connexion, la fonction callback est exécutée, mais s'il n'y a pas de travail à faire, Node.js se met en veille.
const { function createServer<Request extends typeof IncomingMessage = typeof IncomingMessage, Response extends typeof ServerResponse = typeof ServerResponse>(requestListener?: RequestListener<Request, Response>): Server<Request, Response> (+1 overload)
Returns a new instance of
{@link
Server
}
.
The `requestListener` is a function which is automatically
added to the `'request'` event.
```js
import http from 'node:http';
// Create a local server to receive data from
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({
data: 'Hello World!',
}));
});
server.listen(8000);
```
```js
import http from 'node:http';
// Create a local server to receive data from
const server = http.createServer();
// Listen to the request event
server.on('request', (request, res) => {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({
data: 'Hello World!',
}));
});
server.listen(8000);
```createServer } = var require: NodeJS.Require
(id: string) => any
Used to import modules, `JSON`, and local files.require('node:http');
const const hostname: "127.0.0.1"
hostname = '127.0.0.1';
const const port: 3000
port = 3000;
const const server: Server<typeof IncomingMessage, typeof ServerResponse>
server = createServer<typeof IncomingMessage, typeof ServerResponse>(requestListener?: RequestListener<typeof IncomingMessage, typeof ServerResponse> | undefined): Server<...> (+1 overload)
Returns a new instance of
{@link
Server
}
.
The `requestListener` is a function which is automatically
added to the `'request'` event.
```js
import http from 'node:http';
// Create a local server to receive data from
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({
data: 'Hello World!',
}));
});
server.listen(8000);
```
```js
import http from 'node:http';
// Create a local server to receive data from
const server = http.createServer();
// Listen to the request event
server.on('request', (request, res) => {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({
data: 'Hello World!',
}));
});
server.listen(8000);
```createServer((req: IncomingMessage
req, res: ServerResponse<IncomingMessage> & {
req: IncomingMessage;
}
res) => {
res: ServerResponse<IncomingMessage> & {
req: IncomingMessage;
}
res.ServerResponse<Request extends IncomingMessage = IncomingMessage>.statusCode: number
When using implicit headers (not calling `response.writeHead()` explicitly),
this property controls the status code that will be sent to the client when
the headers get flushed.
```js
response.statusCode = 404;
```
After response header was sent to the client, this property indicates the
status code which was sent out.statusCode = 200;
res: ServerResponse<IncomingMessage> & {
req: IncomingMessage;
}
res.OutgoingMessage<IncomingMessage>.setHeader(name: string, value: number | string | readonly string[]): ServerResponse<IncomingMessage> & {
req: IncomingMessage;
}
Sets a single header value. If the header already exists in the to-be-sent
headers, its value will be replaced. Use an array of strings to send multiple
headers with the same name.setHeader('Content-Type', 'text/plain');
res: ServerResponse<IncomingMessage> & {
req: IncomingMessage;
}
res.Stream.Writable.end(chunk: any, cb?: () => void): ServerResponse<IncomingMessage> & {
req: IncomingMessage;
} (+2 overloads)
Calling the `writable.end()` method signals that no more data will be written
to the `Writable`. The optional `chunk` and `encoding` arguments allow one
final additional chunk of data to be written immediately before closing the
stream.
Calling the
{@link
write
}
method after calling
{@link
end
}
will raise an error.
```js
// Write 'hello, ' and then end with 'world!'.
import fs from 'node:fs';
const file = fs.createWriteStream('example.txt');
file.write('hello, ');
file.end('world!');
// Writing more now is not allowed!
```end('Hello World');
});
const server: Server<typeof IncomingMessage, typeof ServerResponse>
server.Server.listen(port?: number, hostname?: string, listeningListener?: () => void): Server<typeof IncomingMessage, typeof ServerResponse> (+8 overloads)
Start a server listening for connections. A `net.Server` can be a TCP or
an `IPC` server depending on what it listens to.
Possible signatures:
* `server.listen(handle[, backlog][, callback])`
* `server.listen(options[, callback])`
* `server.listen(path[, backlog][, callback])` for `IPC` servers
* `server.listen([port[, host[, backlog]]][, callback])` for TCP servers
This function is asynchronous. When the server starts listening, the `'listening'` event will be emitted. The last parameter `callback`will be added as a listener for the `'listening'`
event.
All `listen()` methods can take a `backlog` parameter to specify the maximum
length of the queue of pending connections. The actual length will be determined
by the OS through sysctl settings such as `tcp_max_syn_backlog` and `somaxconn` on Linux. The default value of this parameter is 511 (not 512).
All
{@link
Socket
}
are set to `SO_REUSEADDR` (see [`socket(7)`](https://man7.org/linux/man-pages/man7/socket.7.html) for
details).
The `server.listen()` method can be called again if and only if there was an
error during the first `server.listen()` call or `server.close()` has been
called. Otherwise, an `ERR_SERVER_ALREADY_LISTEN` error will be thrown.
One of the most common errors raised when listening is `EADDRINUSE`.
This happens when another server is already listening on the requested`port`/`path`/`handle`. One way to handle this would be to retry
after a certain amount of time:
```js
server.on('error', (e) => {
if (e.code === 'EADDRINUSE') {
console.error('Address in use, retrying...');
setTimeout(() => {
server.close();
server.listen(PORT, HOST);
}, 1000);
}
});
```listen(const port: 3000
port, const hostname: "127.0.0.1"
hostname, () => {
var console: Console
The `console` module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.
The module exports two specific components:
* A `Console` class with methods such as `console.log()`, `console.error()` and `console.warn()` that can be used to write to any Node.js stream.
* A global `console` instance configured to write to [`process.stdout`](https://nodejs.org/docs/latest-v22.x/api/process.html#processstdout) and
[`process.stderr`](https://nodejs.org/docs/latest-v22.x/api/process.html#processstderr). The global `console` can be used without importing the `node:console` module.
_**Warning**_: The global console object's methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the [`note on process I/O`](https://nodejs.org/docs/latest-v22.x/api/process.html#a-note-on-process-io) for
more information.
Example using the global `console`:
```js
console.log('hello world');
// Prints: hello world, to stdout
console.log('hello %s', 'world');
// Prints: hello world, to stdout
console.error(new Error('Whoops, something bad happened'));
// Prints error message and stack trace to stderr:
// Error: Whoops, something bad happened
// at [eval]:5:15
// at Script.runInThisContext (node:vm:132:18)
// at Object.runInThisContext (node:vm:309:38)
// at node:internal/process/execution:77:19
// at [eval]-wrapper:6:22
// at evalScript (node:internal/process/execution:76:60)
// at node:internal/main/eval_string:23:3
const name = 'Will Robinson';
console.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to stderr
```
Example using the `Console` class:
```js
const out = getStreamSomehow();
const err = getStreamSomehow();
const myConsole = new console.Console(out, err);
myConsole.log('hello world');
// Prints: hello world, to out
myConsole.log('hello %s', 'world');
// Prints: hello world, to out
myConsole.error(new Error('Whoops, something bad happened'));
// Prints: [Error: Whoops, something bad happened], to err
const name = 'Will Robinson';
myConsole.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to err
```console.Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)
Prints to `stdout` with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html)
(the arguments are all passed to [`util.format()`](https://nodejs.org/docs/latest-v22.x/api/util.html#utilformatformat-args)).
```js
const count = 5;
console.log('count: %d', count);
// Prints: count: 5, to stdout
console.log('count:', count);
// Prints: count: 5, to stdout
```
See [`util.format()`](https://nodejs.org/docs/latest-v22.x/api/util.html#utilformatformat-args) for more information.log(`Server running at http://${const hostname: "127.0.0.1"
hostname}:${const port: 3000
port}/`);
});
Cela contraste avec le modèle de concurrence le plus courant aujourd'hui, dans lequel les threads du système d'exploitation sont utilisés. sont utilisés. Les réseaux basés sur les threads sont relativement inefficaces et très difficile à utiliser. En outre, les utilisateurs de Node.js n'ont pas à s'inquiéter d'un blocage du processus, puisqu'il n'y a pas de verrous. de bloquer le processus, puisqu'il n'y a pas de verrous. Presque aucune fonction de Node.js n'exécute directement des E/S, de sorte que le processus ne se bloque jamais, sauf lorsque les E/S sont exécutées à l'aide des méthodes synchrones de Node.js. méthodes synchrones de la bibliothèque standard de Node.js. Comme rien ne se bloque, il est très raisonnable de développer des systèmes évolutifs en Node.js. raisonnables à développer en Node.js.
Si ce langage ne vous est pas familier, vous trouverez un article complet sur le site suivant Bloquant et Non-bloquant.
La conception de Node.js est similaire et influencée par des systèmes tels que Ruby Event Machine et Twisted de Python.
Node.js pousse le modèle d'événement un peu plus loin.
Il présente une boucle d'événements comme une construction d'exécution et non comme une bibliothèque. Dans d'autres systèmes,
il y a toujours un appel bloquant pour démarrer la boucle d'événements.
Généralement, le comportement est défini par des rappels au début d'un script et, à la fin, un serveur est démarré par un appel bloquant comme EventMachine::run()
.
Dans Node.js, il n'y a pas de tel appel start-the-event-loop. Node.js entre simplement dans la boucle d'événements après avoir exécuté le script d'entrée. Node.js
quitte la boucle d'événements lorsqu'il n'y a plus de rappels à effectuer. Ce comportement
est similaire à celui d'un navigateur JavaScript - la boucle d'événements est cachée à l'utilisateur.
HTTP est un citoyen de première classe dans Node.js, conçu pour la diffusion en continu et la faible latence. latence. Node.js est donc bien adapté à la création d'une bibliothèque ou d'un cadre web. web ou d'un framework.
Le fait que Node.js soit conçu sans threads ne signifie pas que vous ne pouvez pas tirer
profit de plusieurs cœurs dans votre environnement. Les processus enfants peuvent être créés en utilisant notre API child_process.fork()
, et sont conçus pour être faciles à
communiquer avec. Le module cluster
est construit sur cette même interface,
qui vous permet de partager des sockets entre les processus afin d'équilibrer la charge
sur vos cœurs.
Ressources officielles Node.js
Pour garantir l'authenticité et la sécurité lorsque vous travaillez avec Node.js, utilisez toujours des sources officielles. Évitez de faire confiance aux courriels, aux binaires ou aux téléchargements provenant de sources non officielles.
Domaines officiels de Node.js
Pour télécharger les binaires Node.js et accéder à la documentation officielle, utilisez uniquement ces domaines :
- nodejs.org
- nodejs.dev (Redirection vers https://nodejs.org)
- iojs.org (Redirection vers https://nodejs.org)
Paquets npm officiels
L'équipe Node.js maintient les paquets npm officiels suivants :
De plus, l'équipe Node.js maintient les paquets publiés par le compte npm nodejs-foundation
,
bien que d'autres paquets liés à Node.js (comme undici
) puissent également être maintenus par des contributeurs étroitement
liés au projet.
L'utilisation de paquets de l'équipe Node.js garantit que vous travaillez avec des composants Node.js officiellement supportés.
Organisations GitHub officielles
Node.js et les projets connexes sont maintenus sous ces organisations officielles GitHub :
Canaux de communication officiels
Node.js et la Fondation OpenJS communiquent par le biais de divers canaux officiels et soutenus par la communauté. Vous trouverez des détails sur comment y participer sur la page S'impliquer.
Signaler les problèmes et les temps d'arrêt d'un site web
Si vous rencontrez des problèmes avec le site web Node.js, signalez-les à Dépôt du site web Node.js. Pour obtenir des mises à jour en temps réel sur les pannes, visitez la page d'état de Node.js.