Express:请求的模块不提供名为 'User' 的导出
Express: The requested module does not provide an export named 'User'
我正在使用 Nodemon 和 ESM 模块在 Express + Mongoose[=26= 上使用 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 模块 (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';
我正在使用 Nodemon 和 ESM 模块在 Express + Mongoose[=26= 上使用 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 模块 (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';