Экспресс-валидатор с модулями ESM

Я пытался импортировать в модуль ESM с этим синтаксисом в Node.js v8.7.0 с --experimental-modules флаг:

import { check, validationResult } from 'express-validator/check';
import { matchedData, sanitize } from 'express-validator/filter';

Однако я получаю следующую ошибку:

(node:29028) ExperimentalWarning: The ESM module loader is experimental.
SyntaxError: The requested module does not provide an export named 'check'
    at checkComplete (internal/loader/ModuleJob.js:86:27)
    at moduleJob.linked.then (internal/loader/ModuleJob.js:69:11)
    at <anonymous>

Как правильно использовать модули ESM, включенные с --experimental-modules флаг?

Я проверял с @std/esm Пакет также. Это работает только я cjs: true,

1 ответ

Решение

Это происходит потому, что в Node.js модули CommonJS импортируются через import только экспорт по умолчанию *.

Если модуль, который вы импортируете, не является модулем ES (как в случае с экспресс-валидатором), то все, что вы можете сделать, это примерно так:

import checkAPIs from 'express-validator/check';
import filterAPIs from 'express-validator/filter';

const { check, validationResult } = checkAPIs;
const { matchedData } = filterAPIs;

* Источник: https://medium.com/the-node-js-collection/an-update-on-es6-modules-in-node-js-42c958b890c

Использовать этот...

         import validator from 'express-validator'
const { check, validationResult } = validator

Теперь при выполнении from 'express-validator/check', например, говорится: requires to express-validator/check are deprecated.You should just use require("express-validator") instead. Как ни странно, до некоторой степени и модули CommonJS тоже.

import validator from 'express-validator'
const { body } = validator
Другие вопросы по тегам