Express:请求的模块未提供名为“ User”的导出

时间:2019-04-10 13:37:29

标签: javascript express mongoose ecmascript-6 database-schema

我正在使用 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;
            }
        }
    }
};

我一直关注this guide,但是他使用ES5语法。任何建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

您正在将 ES6模块import, export)与 CommonJS require/module.exports)混合在一起。我们需要将module.exports = { User };替换为export const User = mongoose.model('user', userSchema);,以便成功将其作为ES6模块导入您的其他文件中。您可以在模型文件中创建命名导出,如下所示:

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';