Я изучаю бэкэнд-разработку с использованием NodeJS с фреймворком Hapi, и у меня возникла ошибка после запуска узла с помощью npm run start.
server.js
const Hapi = require('@hapi/hapi');
const init = async() => {
const server = Hapi.server({
port: 5000,
host: 'localhost',
});
await server.start();
console.info(`Server berjalan pada ${server.info.uri}`);
}
init();
package.json
{
"name": "hapi-web-server",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node server.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@hapi/hapi": "^21.0.0"
}
}
Запуск npm run start в PowerShell:
> [email protected] start E:\DOCUMENT\Dicoding\hapi-web-server
> node server.js
(node:19696) UnhandledPromiseRejectionWarning: TypeError: PerfHooks.performance.eventLoopUtilization is not a function
at new Heavy (E:\DOCUMENT\Dicoding\hapi-web-server\node_modules\@hapi\heavy\lib\index.js:42:60)
at new module.exports.internals.Core (E:\DOCUMENT\Dicoding\hapi-web-server\node_modules\@hapi\hapi\lib\core.js:122:22)
at Object.module.exports (E:\DOCUMENT\Dicoding\hapi-web-server\node_modules\@hapi\hapi\lib\server.js:22:18)
at init (E:\DOCUMENT\Dicoding\hapi-web-server\server.js:4:25)
at Object.<anonymous> (E:\DOCUMENT\Dicoding\hapi-web-server\server.js:13:1)
at Module._compile (internal/modules/cjs/loader.js:1251:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1272:10)
at Module.load (internal/modules/cjs/loader.js:1100:32)
at Function.Module._load (internal/modules/cjs/loader.js:962:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:19696) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:19696) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Я ожидаю, что вывод должен быть:
Server berjalan pada http://localhost:5000’
И когда я ввожу curl -X GET http://localhost:5000, он должен выдать такой вывод:
{"statusCode":404,"error":"Not Found","message":"Not Found"}
Моя версия узла v14.8.0. Будет ли решена проблема, если я обновлю свой узел до последней версии? @derpirscher
Да, любая версия узла >= 14.10 будет работать



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно создать начальный маршрут
const init = async () => {
const server = Hapi.server({
port: 3000,
host: 'localhost'
});
server.route({
method: 'GET',
path: '/',
handler: function (request, h) {
return 'Hello World!';
}
});
await server.start();
console.info('Server running on %s', server.info.uri);
};
Я пробовал код, но он все равно выдает то же сообщение об ошибке. TypeError: PerfHooks.performance.eventLoopUtilization is not a function из init();
Проблема может быть решена установкой версии Hapi @hapi/hapi@^20.1.0.
Но это не объясняет, почему приведенный выше код вызывает ошибку в версии Hapi @hapi/hapi@^21.0.0 (последняя версия / по умолчанию от npm install @hapi/hapi)
Пояснение от derpirscher:
performance.eventLoopUtilizationбыл представлен в версиях узла v14.10.0 и v12.19.0 соответственно. Поэтому, если вы, например, используете узел 14.7 или 12.16, этой функции еще не будет. И @hapi до версии 21 не использовал эту конкретную функцию, поэтому понижение версии решает эту проблему.
Моя версия узла v14.8.0
Вот что вызывает проблему.
Узнав о проблеме, я попытался установить @hapi/hapi и nvm до последней версии, и проблема была решена.
Я также узнал, что поддерживать версию узла проще с NVM для Windows.
Какую версию узла вы используете?
performance.eventLoopUtilizationбыл представлен в версиях узла v14.10.0 и v12.19.0 соответственно. Поэтому, если вы, например, используете узел 14.7 или 12.16, этой функции еще не будет. И @hapi до версии 21 не использовал эту конкретную функцию, поэтому понижение версии решает эту проблему.