使用 import 而不是 require() 时带有 uuid 的 MongooseError
Posted
技术标签:
【中文标题】使用 import 而不是 require() 时带有 uuid 的 MongooseError【英文标题】:MongooseError with uuid when using import instead of require() 【发布时间】:2019-03-27 11:20:52 【问题描述】:我收到以下错误:
MongooseError: document must have an _id before saving
当我尝试使用我的 API 使用 uuid
创建一个对象(Campagn)时:
import uuidv4 from 'uuid/v4';
当我使用它时它可以工作:
const uuidv4 = require('uuid/v4');
我的 Campagne 对象使用其 uuid
正确创建。
这是我的对象架构的完整代码:
import * as mongoose from 'mongoose';
import uuidv4 from 'uuid/v4';
export const CampagneSchema = new mongoose.Schema(
_id: type: String, default: uuidv4 ,
dateDebut: Date,
dateFin: Date,
reduction: Number,
);
TSLint 告诉我使用 import
而不是 require()
并在我的 IDE 中将其下划线作为错误,但它肯定无法如上所示工作。
谁能解释一下为什么会这样?
有关信息,我使用带有 Typescript 的 NestJS node.js 框架。
澄清:
我想知道为什么import
为mongoose
工作而不为uuid
工作(require
为uuid
工作)
【问题讨论】:
【参考方案1】:我在 Github node-uuid
上找到了问题的答案。
以下代码正在运行:
import v4 as uuid from 'uuid';
https://github.com/kelektiv/node-uuid/issues/245
import uuid from 'uuid/v4';
语法不起作用,至少在Node v10.9.0
上运行的Typescript v3
项目中(没有 webpack 和 babel,只有ts-node
来编译/运行 Typescript)我收到以下错误:
TypeError: v4_1.uuid is not a function
另一方面,
import v4 as uuid from 'uuid';
按预期工作(在
uuid v3.3.2
上测试)
感谢您的回答。
【讨论】:
【参考方案2】:删除_id: type: String, default: uuidv4 ,
Mongoose 会自动生成_id
并使用const ddd = require(...)
我认为 ES6 模块在 Node 项目中无法正常工作
【讨论】:
但我想使用 uuid 而不是 Mongoose idimport
适用于我项目中除此之外的其他情况(例如猫鼬),为什么我需要在此特定情况下使用require()
?
@XavierFr 我认为这取决于库的模块结构。 github.com/kelektiv/node-uuid#readme库推荐CommonJS方式
我明白了。我仍然不明白为什么它不能那样工作,但他们说要在 CommonJS 中那样做,所以我想我会遵循这个。如果有人能回答我为什么不能使用import
,我会保持这个问题。以上是关于使用 import 而不是 require() 时带有 uuid 的 MongooseError的主要内容,如果未能解决你的问题,请参考以下文章
为啥我必须对 React 中的图像使用“require”而不是“import from”?
Gulp-sass 5.0 如何使用带有 import() 而不是 require() 的编译器?
为 ES6 "import x" 而不是 express 中的 "require(x)" 准备环境的简单方法