Код: Выделить всё
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
Код: Выделить всё
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
Мобильная версия