javascript - Express:请求的模块不提供名为“用户”的导出
问题描述
我正在使用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 语法。任何建议表示赞赏。
解决方案
您将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';
推荐阅读
- javascript - 使用节点和动态生成的 HTML 修改 HTML 文件
- database - 如何将 CSV 文件导入 DolphinDB?
- python - 打开和关闭 Firefox 浏览器的两个实例
- javascript - Node.js - 无法使用 $(this) 从 jquery 访问把手元素
- java - 为什么这个while循环与“and”运算符一起使用而不与“or”一起使用?
- keras - DepthwiseConv2D 和 SeparableConv2D 的区别
- c++11 - 无状态 Lambda 和私有成员
- node.js - 执行 http.get 的 Promise 返回“待处理”
- maven - 仅发布来自一个大项目的某些工件
- ios - 导致 MPNowPlayingInfoCenter 丢失状态的广告横幅