javascript - 如果不使用解构赋值,则需要不工作
问题描述
在我的. nodejs
_ 当我在不使用赋值的情况下需要模块并使用运算符创建模型的新实例时,我得到模型不是函数。但是,如果我在模型时使用分配,一切正常。无法理解为什么。mongoose
exports
model (User)
destructuring
new
error
destructuring
require
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"
});
解决方案
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', {
…
});
推荐阅读
- git - GIT:如何合并先前从合并提交中删除的更改
- css - 调整窗口大小时,多级推送菜单对浏览器来说太重了
- vb.net - 设置断点
- ubuntu-14.04 - Devstack 安装:运行 ./stack.sh 后 n-cpu 和 q-l3 失败
- uml - UML 2.5.1 和 UML 2.5 之间的区别
- typescript - Typescript:如何声明代表 Treeview 的类型?可能吗?
- azure-devops - 用于创建分支的对话框的目标字段中有什么内容?
- html - 如何通过 Apps 脚本在 Google 协作平台中的链接部分使用 CSS/HTML 搜索框?
- c++ - Boost Djikstra 类 "boost::property_map> 没有成员 "type"
- python - 用户名和密码相同时如何登录网站?