Express:请求的模块未提供名为'User'的导出项。

8

我正在使用 Nodemon 和 ESM 模块在一个 Express + Mongoose 项目中使用 ES6 语法。当编译时,我遇到了以下错误:

SyntaxError: 所请求的模块 'file:///.../models/User.js' 未提供导出名为“User”的导出项。

我的模型文件(models/User.js)如下所示:

import mongoose, { Schema } from 'mongoose';

const userSchema = new Schema({
  name: String,
  email: String,
  password: String,
  type: String,
  createdOn: String,
  updatedOn: String
});

const User = mongoose.model('user', userSchema);

module.exports = { User };

然后我将其导入:

import { User } from '../models/User';
import bcrypt from 'bcrypt';

export default {
    Query: {
        getUsers: async () => await User.find({}).exec()
    },
    Mutation: {
        addUser: async (_, args) => {
            try {
                const user = args;
                user.password = await hashPassword(args.password);
                user.createdOn = Date.now();
                user.updatedOn = Date.now();

                let response = await User.create(user);
                return response;

            } catch(e) {
                return e.message;
            }
        }
    }
};

我正在按照这篇指南进行,但他使用ES5语法。欢迎提出任何建议。

1个回答

16

你混用了ES6模块import, export)和CommonJSrequire/module.exports)。为了在其他文件中成功导入它作为ES6模块,我们需要用export const User = mongoose.model('user', userSchema);替换module.exports = { User };。您可以在模型文件中创建命名导出,如下所示:

import mongoose, { Schema } from 'mongoose';

const userSchema = new Schema({
  name: String,
  email: String,
  password: String,
  type: String,
  createdOn: String,
  updatedOn: String
});

export const User = mongoose.model('user', userSchema);

这将使您能够像这样导入:

import { User } from '../models/User';

知道了。谢谢。 - Maramal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接