首页 > 解决方案 > 如果不使用解构赋值,则需要不工作

问题描述

在我的. nodejs_ 当我在不使用赋值的情况下需要模块并使用运算符创建模型的新实例时,我得到模型不是函数。但是,如果我在模型时使用分配,一切正常。无法理解为什么。mongooseexportsmodel (User)destructuringnewerrordestructuringrequire

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)

但是,如果我在 上使用destructuring作业line 2,则一切正常。 服务器.js

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

console.log(typeof(User));

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

标签: javascriptnode.jsecmascript-6es6-modules

解决方案


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', {
    …
});

推荐阅读