javascript - Express:请求的模块不提供名为 'User' 的导出

标签 javascript express mongoose ecmascript-6 database-schema

我正在使用 Nodemon 和 ESM 模块在 Express + Mongoose 项目上使用 ES6 语法。编译时出现此错误:

SyntaxError: The requested module 'file:///.../models/User.js' does not provide an export named '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 语法。任何建议表示赞赏。

最佳答案

您正在将 ES6 模块(导入、导出)与 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';

关于javascript - Express:请求的模块不提供名为 'User' 的导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55614017/

相关文章:

javascript - 快速路线不起作用?

node.js - Mongodb计数聚合返回0

javascript - 如何在 jQuery 中构建多维数组

javascript - Slick Carousel 目标事件幻灯片添加和删除动画类

c# - 在按下回车键时触发 ASP.NET TextBox 事件

reactjs - React Redux 状态将在 Nginx 的路由更改时初始化

node.js - 从node.js中的mongoDB数据生成JSON树

MongoDB $elemMatch

当超过 100 个结果时,Node.js + mongoose find 卡住 Node

javascript - For-Loop 调用时未运行