Разница между расширением 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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