当我尝试使用mongoose连接时,为什么会出现“mongoose.connect不是函数”的错误?

23

我是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

我已经尽力搜索谷歌了,但没有任何运气。

有人能告诉我我做错了什么吗?


1
将以下代码放置在mongoSetup函数中,并让我知道你得到了什么结果:mongoose.connect(this.mongoUrl, { useNewUrlParser: true, useUnifiedTopology: true }).then(function(data) { console.log("data = ", data); }).catch(function(err) { console.log(err); }); - Alok Deshwal
1
在加载mongoose模块后立即记录你的mongoose。 - Alok Deshwal
我刚刚复制了你的代码,并将第一行替换为 import * as express from 'express';,它就简单地运行了。 - Alok Deshwal
我已经进行了您的更改,执行了 tsc ./lib/server.js 进行编译。然后它成功地运行了。感谢您的帮助。 - Nick Hodges
我想了解一下你的项目的骨架和文件(MVC或其他)组织结构。你能分享一下吗? 谢谢! :-) - Khuram
显示剩余2条评论
5个回答

30

替换:

import * as mongoose from "mongoose";

随着:

import mongoose from "mongoose";

2
https://dev59.com/91MI5IYBdhLWcg3wcK7K#56348146 - 解释 - yashodha_h

18

这对我有用:替换

import * as mongoose from "mongoose";

随着

import mongoose = require("mongoose");

7

如果在你的 tsconfig.json 文件中设置了 "esModuleInterop": true,那么它将强制你以不同的方式导入 mongoose。所以请修改上述选项或更改导入 mongoose 的方式。


3
一种好的方法是只导入你需要的方法,例如:
import { connect } from 'mongoose';

然后在你的类中

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

1
如果还有人遇到这个错误,尝试在服务器上运行,比如使用Express。 我是通过花了将近8个小时尝试了谷歌上的各种方法才学会的。

我正在将一个Next应用移植到React,遇到了这个有点傻的问题,哈哈 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接