-1

私は lireddit のチュートリアルに従おうとしていますが、最初の mikro-orm の移行に行き詰まっています。

この投稿で報告されているのと同じ問題が発生しています。

サンプルのエンティティ コンストラクターを変更しました (ただし、mikro-orm ドキュメントで提供されている形式を使用すると同じ問題が発生します)。

現在、次のPosts.tsファイルがあります。

import { Entity, PrimaryKey, Property } from "@mikro-orm/core";
// import { v4 } from 'uuid';

@Entity()
export class Post {
  @PrimaryKey()
  id!: number;
  // uuid: string = v4();

  // @SerializedPrimaryKey()
  // id!: string;

  @Property({ type: "date" })
  createdAt: Date = new Date();

  @Property({ type: "date", onUpdate: () => new Date() })
  updatedAt: Date = new Date();

  @Property({ type: "text" })
  title!: string;
}

コードは次のように実行されます。

const main = async () => {
  const orm = await MikroORM.init(config);
  await orm.getMigrator().up();
  const post = orm.em.create(Post, {title: "first title"});
  await orm.em.persistAndFlush(post);
};

main().catch((err) => {
    console.log(err);
});

エラーメッセージには次のように記載されています。

NotNullConstraintViolationException: 「post」(「created_at」、「title」、「updated_at」) 値 ('2021-08-18T22:13:54.599Z'、'first title'、'2021-08-18T22:13:54.599) に挿入しますZ') "id" を返す - リレーション "post" の列 "_id" の null 値は、PostgreSqlExceptionConverter.convertException で非 null 制約に違反します

idこれが何を意味するのか、列に数値を設定する方法がわかりません。mikro-orm ドキュメントでは、アンダースコア プレフィックスを使用して主キーを定義し (アンダースコアが何をしているのかも不明)、それを ObjectId として指定してから、シリアル化された主キーを使用することに注意してください。この形式を使用してみましたが、同じエラーが発生します。

私も試しました:

  1. uuid(の代わりに)主キーとして追加id- 上記のコメント付きコードに示されていますが、同じエラーが発生します。

  2. postconstに ID として数値を追加します。

    const post = orm.em.create(Post, {title: "first title", id: 2});
    

これにより、NotNullConstraintViolationException: idnull であることを示すエラーも生成されます。

  1. この投稿からの提案の 1 つは、 index.ts.

    const generator = orm.getSchemaGenerator();
    await generator.updateSchema();
    

私はこれを試してみましたが、実行するyarn devと、端末は開始コマンドでハングするだけです (watch 環境にエラーは表示されません)。

yarn run v1.22.11
$ nodemon dist/index.js
[nodemon] 2.0.12
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node dist/index.js`
  1. これらの新しい 2 行を削除して再試行しました。今回は、mikro-orm migration:createコマンドの初期フラグを使用して (ノード モジュール フォルダー、distフォルダー、およびsrc/migrationsフォルダーを削除した後)、

私がそれを試してみると、それは言う

Error: Initial migration cannot be created, as some migrations already exist. The files listed are in the node modules folder.
  1. 私もin - に設定しよuseTsNodeうとしましたが、上記と同じ問題が発生しました。truepackage.json

誰かがこれを理解しましたか?

私が気づいたことの 1 つは、dist フォルダーとノード モジュールを削除し、yarn を再実行した後、dist/index.jsファイルが Ben のオリジナルのように見えないことです。それは今言う:

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const core_1 = require("@mikro-orm/core");
const Post_1 = require("./entities/Post");
const mikro_orm_config_1 = __importDefault(require("./mikro-orm.config"));
const main = () => __awaiter(void 0, void 0, void 0, function* () {
    const orm = yield core_1.MikroORM.init(mikro_orm_config_1.default);
    yield orm.getMigrator().up();
    const post = orm.em.create(Post_1.Post, { title: "first title" });
    yield orm.em.persistAndFlush(post);
});
main().catch((err) => {
    console.log(err);
});
//# sourceMappingURL=index.js.map

次に、という名前の新しいエンティティを作成してみますPosted(と同じPostですが、名前が異なります)。

その移行 (新しい必要があります) を作成しようとすると、次のようなエラーが表示されます。

TypeError: 'in' 演算子を使用して未定義の 'schema' を検索することはできません

node_modules次に、フォルダー内のいくつかのファイルを一覧表示します。

at MetadataDiscovery.prepare node_modules/@mikro-orm/core/metadata/MetadataDiscovery.js:135:22)
at MetadataDiscovery.discoverReferences /@mikro-orm/core/metadata/MetadataDiscovery.js:125:48)
at MetadataDiscovery.findEntities node_modules/@mikro-orm/core/metadata/MetadataDiscovery.js:71:20)
at async MetadataDiscovery.discover /node_modules/@mikro-orm/core/metadata/MetadataDiscovery.js:34:9)
at async Function.init /node_modules/@mikro-orm/core/MikroORM.js:42:24)
4

1 に答える 1