3

Sails.js をバックエンド フレームワークとして使用して、プロジェクトを PHP から Node.js に移行しています。データベースを変更することはできず、このプロジェクトには既存のデータベースを使用する必要があります。

新しく作成されたモデルの を保持するmigrate: "alter"と、Sails はデフォルトでidフィールドを整数として保持します。

ただし、既存のデータベースの場合、idフィールドはほとんどbigint. migrate: "safe"そのため、モデルの作成を定義して進めました。

現在私が直面している問題は、ブループリント ルートが結果を返すときに、数値として返されるはずの id 列の値が代わりに文字列として返されることです。次に例を示します。

[
  {
    "starttime": "07:00:00",
    "endtime": "14:00:00",
    "id": "1"
  },
  {
    "starttime": "14:00:00",
    "endtime": "22:00:00",
    "id": "2"
  },
  {
    "starttime": "22:00:00",
    "endtime": "07:00:00",
    "id": "3"
  }
]

この問題を解決するにはどうすればよいですか?

これが私のモデルです:

module.exports = {
  tableName: "timeslots",
  autoCreatedAt: false,
  autoUpdatedAt: false,
  attributes: {
    starttime: { type: "string", required: true },
    endtime: { type: "string", required: true }
  }
};

そして、これがpostgresqlテーブル定義です

                                              Table "public.timeslots"
  Column   |  Type  |                       Modifiers                        | Storage  | Stats target | Description 
-----------+--------+--------------------------------------------------------+----------+--------------+-------------
 id        | bigint | not null default nextval('timeslots_id_seq'::regclass) | plain    |              | 
 starttime | text   | not null                                               | extended |              | 
 endtime   | text   | not null                                               | extended |              | 
Indexes:
    "idx_43504_primary" PRIMARY KEY, btree (id)
Referenced by:
    TABLE "doctortimeslot" CONSTRAINT "doctortimeslot_ibfk_2" FOREIGN KEY (timeslot_id) REFERENCES timeslots(id) ON UPDATE CASCADE ON DELETE CASCADE
4

2 に答える 2

0

別の方法として、 https://github.com/mirek/node-pg-safe-numbersを使用できます。これは、安全でない処理を委任することでこの問題を正確に処理します (数値が 2^53 JavaScript 制限に適合しない場合) - ここで解析された値、文字列、null を返したり、エラーをスローしたり、何か他のことを行うことができます。

多くの場合、ライブラリによって提供される自動解析を使用でき、unsafe ハンドラでは元の文字列値を返すだけです。次に、2^53 を超える数値 (ランダムな大きな数値) を使用しているコードでは、常に文字列にキャストすれば問題ありません。

于 2015-10-29T22:55:35.367 に答える