在使用导入语法时未定义猫鼬,在使用require时未定义猫鼬

时间:2019-08-07 06:21:06

标签: javascript typescript mongoose ecmascript-6 nestjs

所以我的模块是这样写的

import mongoose from 'mongoose';

export class MyModule {
   constructor(){
       //do
   }

   create(str){
      mongoose.connect(str); //cannot find property 'connect' of undefined
   }

}

使用导入语法时,出现cannot find property 'connect' of undefined错误;在使用require时可以正常工作。

很奇怪,通过导入语法导入单个属性的工作符合预期,

import { connect } from 'mongoose'

但是出于某些其他原因,我需要访问整个ORM。

为什么会这样?难道我做错了什么?公平地说,我在ES6模块系统,TypeScript和Node.js方面没有太多经验,所以我可能在这里缺少一些东西。


我正在使用NestScript在打字稿文件上的Node.js上运行它。

4 个答案:

答案 0 :(得分:2)

您可以在LD_LIBRARY_PATH文件中进行设置

tsconfig.json

这将允许您使用语法

"allowSyntheticDefaultImports": true,
"esModuleInterop": true

答案 1 :(得分:1)

在安装@types/mongoose之后,VS Code报告猫鼬没有默认情况下的导出(均被命名为exports),

import mongoose from `mongoose`

不起作用。这也解释了为什么获取单个属性的原因:

import { connect } from `mongoose`

作为一种解决方法,感谢@Binit Ghetiya在此线程中首次提到它,您应该改为这样做:

import * as mongoose from `mongoose`

将Mongoose的每个命名出口编译到变量mongoose中。

答案 2 :(得分:1)

  

我们总共可以使用2个Syntex。

ES15(NodeJS)

from featuretools.primitives import make_agg_primitive
from featuretools.variable_types import Variable
from featuretools.variable_types import Numeric
import pandas as pd
import featuretools as ft

class List(Variable):
    type_string = "list"

def sum_list(values):
    return sum(values,[])


SumList = make_agg_primitive(function = sum_list,
                                  input_types = [List],
                                  return_type = [List],
                                  description="length of a list related instance")

# Create a simple entityset containing list data
data = pd.DataFrame({"id": [1, 2, 3],
                     "products1": [1, 2, 3] })
inp = [{'id':1, 'products':['a', 'b', 'c','a']}, {'id':1,'products':['a','c','c','a']}, {'id':2,'products':['a','c','c','a']}]
df = pd.DataFrame(inp)



es = ft.EntitySet(id="data")
es = es.entity_from_dataframe(entity_id="customers",
                              dataframe=data,
                              index="id")
es = es.entity_from_dataframe(entity_id="customers1",
                              dataframe=df,
                              index="id1",
                              make_index=True,
                              variable_types={
                                   'products': List # Use the custom List type
                              })

r_A_B = ft.Relationship(es['customers']['id'], es['customers1']['id'])

es = es.add_relationship(r_A_B)

feature_matrix, features = ft.dfs(entityset=es,
                                  target_entity="customers",
                                  agg_primitives=[SumList],
                                  trans_primitives=[])

然后使用 mongoose.connect

ES16(导入/导出)

id  products
1   [a, b, c, a, c, c, a]
2   [a, c, c, a]`

然后使用 mongoose.connect

const mongoose = require('mongoose');

然后直接使用连接

答案 3 :(得分:0)

只需按以下步骤更改导入:

import * as mongoose from 'mongoose';

以下是示例:

import * as mongoose from 'mongoose';

export class MyModule {

   constructor(){
       //do
   }

   create(str){
      mongoose.connect(str);
   }
}