gpt4 book ai didi

javascript - 如果不使用解构赋值则要求不工作

转载 作者:搜寻专家 更新时间:2023-11-01 00:16:16 25 4
gpt4 key购买 nike

在我的 nodejs 中,我有一个小的 mongoose 模块,它导出 模型(用户)。当我在不使用 destructuring 赋值的情况下需要模块并使用 new 运算符创建模型的新实例时,我得到了模型的 error不是函数。但是,如果我在 require 模型时使用 destructuring 赋值,则一切正常。无法理解为什么。

User.js 导出模型

const mongoose = require('mongoose');

exports.User = mongoose.model('User', {
email:{
type: String,
trim: true,
minlength: 1,
reuqired: true
}
});

如果我不在第 2 行 上使用解构运算符,下面的代码会抛出错误:
server.js

const mongoose = require('../DB/mongoose');
const User = require('../Models/User');

console.log(typeof(User));

let user = new User({
email: "sdfdsf"
});

server.js 抛出以下错误:

let user = new User({
^

TypeError: User is not a constructor
at Object.<anonymous> (F:\javascript\nodePractice\ToDoApp\server\server.js:6:12)
at Module._compile (internal/modules/cjs/loader.js:678:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:689:10)
at Module.load (internal/modules/cjs/loader.js:589:32)
at tryModuleLoad (internal/modules/cjs/loader.js:528:12)
at Function.Module._load (internal/modules/cjs/loader.js:520:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:719:10)
at startup (internal/bootstrap/node.js:228:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:576:3)

But If I use a destructuring assignment on line 2, it works all fine. server.js:

const mongoose = require('../DB/mongoose');
const {User} = require('../Models/User');

console.log(typeof(User));

let user = new User({
email: "sdfdsf"
});

最佳答案

const {User} = require('../Models/User');

相当于

const User = require('../Models/User').User;
// ^^^^^

require() 返回的模块对象(您的模块填充的 exports 对象)确实有一个 .User 属性。如果您不访问它但尝试将模块对​​象用作构造函数,它会抛出。

明确地说,你可能想使用

const userModule = require('../Models/User');

console.log(typeof userModule);
console.log(typeof userModule.User);

let user = new userModule.User({
email: "sdfdsf"
});

或者,如果您坚持执行 const User = require('../Models/User');,您还可以通过覆盖 module.exports 使构造函数成为导出对象而不是在其上创建属性:

const mongoose = require('mongoose');

module.exports = mongoose.model('User', {

});

关于javascript - 如果不使用解构赋值则要求不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50554170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com