尝试与猫鼬连接时,为什么会出现“ mongoose.connect不是函数”的提示?

时间:2019-09-15 13:54:58

标签: node.js mongodb typescript express mongoose

我是Node.js的新手,正在尝试使用TypeScript构建node / express / mongoose服务器应用程序。

这是我的app.ts文件:

// lib/app.ts
import express from 'express';
import * as bodyParser from 'body-parser';
import { Routes } from './routes/crmRoutes';
import * as mongoose from "mongoose";

class App {
  public app: express.Application;
  public routePrv: Routes = new Routes();
  public mongoUrl: string = 'mongodb://localhost/TodosDB';

  constructor() {
    this.app = express();
    this.config();
    this.routePrv.routes(this.app);
    this.mongoSetup();
  }

  private mongoSetup(): void {
    mongoose.connect(this.mongoUrl, {
      useNewUrlParser: true,
      useUnifiedTopology: true
    });
  }

  private config(): void {
    // support application/json type post data
    this.app.use(bodyParser.json());
    //support application/x-www-form-urlencoded post data
    this.app.use(bodyParser.urlencoded({ extended: false }));
  }
}

export default new App().app;

但是,当我尝试编译应用程序时,会得到:

TypeError: mongoose.connect is not a function

我已经用光了我所有的Google技术-没运气了。

有人可以告诉我我在做什么错吗?

4 个答案:

答案 0 :(得分:5)

替换:

import * as mongoose from "mongoose";

使用:

import mongoose from "mongoose";

答案 1 :(得分:1)

如果tsconfig.json中有"esModuleInterop": true,,它将迫使您以不同的方式导入猫鼬,因此请更改上述选项或更改导入猫鼬的方式

答案 2 :(得分:1)

一个不错的方法是只导入你需要的方法,例如。

import { connect } from 'mongoose';

然后在你的班级

class App {
  private async mongoSetup(): Promise<void> {
    await connect(this.mongoUrl, {
        useNewUrlParser: true,
        useUnifiedTopology: true
    });
  }
}

答案 3 :(得分:0)

这对我有用:替换

import * as mongoose from "mongoose";

使用

import mongoose = require("mongoose");