Невозможно использовать инструкцию import вне модуля Express.js

#node.js #mongodb #mongoose

Вопрос:

Я пытаюсь соединить свою модель с именем «категория» с моей моделью «товар», но я получаю эту ошибку, которая не позволяет мне импортировать ее. Я не могу использовать require, потому что ES не поддерживает его, и он предлагает мне вместо этого использовать импорт.

Код:

 const mongoose = require("mongoose");
import descData from "./category";

const itemSchema = mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
  created: {
    type: String,
    required: true,
    unique: true,
  },
  category: [descData],
  quantity: {
    type: [String],
    required: true,
  },
});

var itemData = mongoose.model("itemData", itemSchema);
module.exports = itemData;
 

И вот мой код категории:

 const mongoose = require("mongoose");

const descSchema = mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
  descripton: {
    type: String,
  },
});

var descData = mongoose.model("descData", descSchema);
module.exports = descData;

 

Вот также скриншот ошибкиошибка

Ответ №1:

либо вы используете обозначения импорта для всего (но вам нужно будет установить «тип»: «модуль» в файле package.json и правильно экспортировать файлы модулей)

или вы используете обязательную нотацию везде

а это значит, что ты должен это сделать :

 const descData = require("./category");
 

вот пример схемы в схеме. вы можете видеть, что вы помещаете не модель в схему, а схему в схему.

 const childSchema = new Schema({ name: 'string' });

const parentSchema = new Schema({
  // Array of subdocuments
  children: [childSchema],
  // Single nested subdocuments. Caveat: single nested subdocs only work
  // in mongoose >= 4.2.0
  child: childSchema
});
 

Комментарии:

1. Но затем я получаю ошибку: » model недопустимый тип в массиве category «, относящийся к mongoose.model(….)

2. я думаю, что в файле вашей категории вам следует сделать : module.exports = descSchema; потому что мангусту нужна схема

Ответ №2:

Вы используете модуль «CommonJS» и шаблоны модулей ES6 вместе, что не является жизнеспособным решением. Вы должны выбрать импорт/экспорт, предоставляемый ES6.

Вы можете сделать его доступным, добавив type: "module" в свой пакет.json. Кроме того, теперь вам нужно использовать export вместо module.exports . Существует два способа экспорта: именованный экспорт и экспорт по умолчанию. Проверьте это для получения более подробной информации.

Внесите изменения в свой файл js:

 import mongoose from 'mongoose';
import descData from "./category";

const itemSchema = mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
  created: {
    type: String,
    required: true,
    unique: true,
  },
  category: [descData],
  quantity: {
    type: [String],
    required: true,
  },
});

const itemData = mongoose.model("itemData", itemSchema);
export default itemData;
 

Комментарии:

1. не будет работать, так как остальные файлы все еще используют синтаксис require.

2. Определенно, он должен либо следовать commonjs, либо es6 во всем проекте.