Разница между расширением http.Server и http.createServerJavascript

Форум по Javascript
Anonymous
Разница между расширением http.Server и http.createServer

Сообщение Anonymous »

Я хочу создать пользовательский экземпляр HTTP-сервера с помощью пользовательских методов.

Код: Выделить всё

const {createServer, Server} = require("http");

class Direct extends Server {

constructor(...args){
super(...args);
}

foo(){
console.log("foo");
return "foo";
}

}

class Wrapper extends createServer {

constructor(...args){
super(...args);
}

foo(){
console.log("foo");
return "foo";
}

}

const direct = new Direct();
const wrapper = new Wrapper();

[direct, wrapper].forEach((server, i) => {

server.once("request", (req, res) => {
server.foo();
res.end(`Hello from server ${i}`);
});

server.listen(9000 + i, () => {
console.log(`Server #${i} listening on port ${9000 + i}`);
});

});
< /code>
output: < /p>
Server #0 listening on port 9000
Server #1 listening on port 9001
foo
/tmp/server.js:39
server.foo();
^

TypeError: server.foo is not a function
at Server. (/tmp/server.js:39:16)
at Object.onceWrapper (node:events:633:26)
at Server.emit (node:events:518:28)
at parserOnIncoming (node:_http_server:1153:12)
at HTTPParser.parserOnHeadersComplete (node:_http_common:117:17)

Node.js v22.16.0

Код: Выделить всё

curl -v http://127.0.0.1:9000
curl -v http://127.0.0.1:9001
Как только сервер «Wrapper» получит запрос:

Код: Выделить всё

TypeError: server.foo is not a function
at Server. (/tmp/server.js:39:16)
at Object.onceWrapper (node:events:633:26)
at Server.emit (node:events:518:28)
at parserOnIncoming (node:_http_server:1153:12)
at HTTPParser.parserOnHeadersComplete (node:_http_common:117:17)

Node.js v22.16.0
Запрос к «Прямому» серверу/классу работает должным образом.
В чем разница между обоими подходами расширения, описанными выше, когда и http.createServer(), и http.Server возвращают экземпляр HTTP-сервера?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... eateserver

Вернуться в «Javascript»