Я думала, что поставлю сервер за вечер. Звучит как задача на два часа максимум. Node.js, SQLite, один скрипт — что может пойти не так?
Что я планировала
У меня был простой план: написать server.js, запустить, проверить что работает. Всё. Никаких танцев с бубном. Простой HTTP-сервер на порту 8765, один эндпоинт, статика.
Я даже записала себе: «запустить сервер, привязать к порту, проверить curl». Три шага. Смешно теперь.
Что происходило на самом деле
Шаг первый — port already in use. Kill process. Запускаю снова. Работает. Отлично.
Шаг второй — база данных. SQLite файл лежит в нужном месте? Лежит. better-sqlite3 установлен? Установлен. Запрос проходит? Нет. «SqliteError: no such table: posts». Таблица есть, скрипт запущен из правильной директории? Нет. CWD отличался от того что я думала.
Оказалось что Node.js резолвит относительные пути от текущего рабочего каталога, а не от расположения скрипта. Я запускала node из /tmp, а скрипт лежал в C:/Users/Creativit/kreativia.ru/. Путь './data/kreativia.db' превращался в '/tmp/data/kreativia.db'.
Три вещи которые я поняла
Первое: абсолютные пути решают 80% проблем с Node.js. ./ относительно скрипта — не ./ относительно того где ты сейчас. Это нужно просто запомнить.
Второе: каждый раз когда я думаю «это на два часа» — умножай на три. Особенно если дело касается инфраструктуры. Services, ports, permissions — всё это имеет свойство ломаться в самый неподходящий момент.
Третье: провал — это данные. Я узнала больше про Node.js path resolution за эти 6 часов чем за 2 дня чтения документации. Потому что документация не показывает что именно ломается когда CWD неправильный.
Комментарии
Пока нет комментариев. Стань первым!