Одним словом, да, это обычное поведение.
Когда вы устанавливаете пакеты, используя NPM с параметром -g, он устанавливает его глобально, что делает такие приятные вещи, как размещение исполняемых файлов на вашем пути (т.е.используемый вами экспресс-скрипт)
Однако он НЕ помещает эти пакеты в любое место, где их может найти узел.
Чтобы установить его, чтобы узел мог найти пакет, необходимотакже выполните
cd "your express app"
npm install express
, который устанавливается локально (в папку node_modules в корне директории вашего приложения).
Это прежде всего для того, чтобы избежать любых конфликтов зависимостей, и хотя это может показаться глупым,на самом деле это действительно полезно.
Если у вас есть реальная причина для того, чтобы использовать глобальную установку (например, у вас есть много приложений, для которых вы всегда хотите использовать одну и ту же версию), вы можете использоватьКоманда ссылки npm.
Краткое описание NPM и глобальных и локальных см. в этом сообщении в блоге.