TypeORM 和 MongoDB 和存储库:无法读取未定义的属性“原型”

Raf*_*ael 4 repository mongodb node.js typeorm

我正在尝试使用存储库通过 MongoDB 实现 TypeORM。然而,当我尝试使用存储库来管理数据库时,使用与此存储库中相同的结构,事情就有点偏离了。我收到以下错误:

UnhandledPromiseRejectionWarning:类型错误:无法读取未定义的属性“原型”

我尝试过以下代码:

import { Request, Response } from 'express';
import { getMongoRepository } from "typeorm";
import Task from "../models/Task";

export default class TasksController {
async listAll(request: Request, response: Response): Promise<Response> {
    const tasksRepository = getMongoRepository(Task);
    try {
      const tasks = await tasksRepository.find();
      return response.status(200).json({ "items": tasks });
    } catch (err) {
      return response.status(400).json({
        message: err.message,
      });
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道错误是指执行该.find()方法。我什至成功地获取了数据,使用这篇文章中的建议替换:

const tasks = await tasksRepository.find();
Run Code Online (Sandbox Code Playgroud)

const tasks = await tasksRepository.createCursor(tasksRepository.find()).toArray();
Run Code Online (Sandbox Code Playgroud)

但我仍然收到上述错误。

有人明白发生了什么事吗?

我还设法通过使用以下脚本将数据直接保存到数据库:

服务器.ts

import express from 'express';
import { createConnection } from 'typeorm'

const app = express();
const port = 3333;
createConnection();

app.use(express.json());

app.post('/tasks', (async (request, response) => {
  const { item } = request.body;
  task.item = item;

  const task = new Task();
  (await connection).mongoManager.save(task);

  return response.send(task);
}))

app.listen(port, () =>
  console.log(`Server running on port ${port}`)
);
Run Code Online (Sandbox Code Playgroud)

小智 16

TypeORM 不支持 mongodb v4。 https://github.com/nestjs/nest/issues/7798

您可以改用 3.7.0。