首页 > 解决方案 > 我正在使用 node/express 和 pg 库与 PostgreSQL 进行通信。当我的模型返回数据时,属性是小写的。为什么?

问题描述

基本问题是,为什么要将属性更改job.companyHandlejob.companyhandle

在我的Job模型中,我有这个功能:

static async create({ title, salary, equity, companyHandle }) {
    const duplicateCheck = await db.query(
        `SELECT title
            FROM jobs
            WHERE title=$1 AND company_handle=$2`,
          [title, companyHandle]);

    if (duplicateCheck.rows[0])
        throw new BadRequestError(`Duplicate job: ${title} at ${companyHandle}`);

    const result = await db.query(
        `INSERT INTO jobs
              (title, salary, equity, company_handle)
           VALUES ($1, $2, $3, $4)
           RETURNING id, title, salary, equity, company_handle AS companyHandle`,
          [
              title,
              salary,
              equity,
              companyHandle
          ],
    );
    const job = result.rows[0];

    return job;
}

我对该函数的开玩笑测试代码如下所示:

describe("create", function () {
    const newJob = {
        title: "NJ1",
        salary: 50000,
        equity: "0.45",
        companyHandle: "c3"
    };

    test("works", async function () {
        let job = await Job.create(newJob);
        expect(job).toEqual({ ...newJob, id: expect.any(Number) });

        const result = await db.query(
            `SELECT id, title, salary, equity, company_handle AS companyHandle
             FROM jobs
             WHERE title = 'NJ1'`);
        expect(result.rows).toEqual([
        {
            id: expect.any(Number),
            title: "NJ1",
            salary: 50000,
            equity: "0.45",
            companyHandle: "c3"
        },
    ]);
    });

    ... another test ...

});

所以我尝试AS companyHandle从 return 语句中删除并添加

        job.companyHandle = job.company_handle;
        delete job.company_handle;

在返回之前进入模型。在其他一些测试中,这会返回正确的companyHandle属性,但在第一个测试用例中,它仍然以companyhandle. 我不明白为什么它返回一个小写字母。


快速查看笑话结果:

create › works

    expect(received).toEqual(expected) // deep equality

    - Expected  - 1
    + Received  + 1

    @@ -1,8 +1,8 @@
      Array [
        Object {
    -     "companyHandle": "c3",
    +     "companyhandle": "c3",
          "equity": "0.45",
          "id": Any<Number>,
          "salary": 50000,
          "title": "NJ1",
        },

另外,我知道这些代码可能没有必要,但是我看到太多没有足够上下文的帖子,所以我决定在过度共享方面犯错。

标签: node.jspostgresqlexpressjestjspg

解决方案


正如评论中提到的,我犯了一个错误,没有双引号我的标识符。

我太专注于一个案例,错过了我没有重复引用的所有其他回报。

谢谢@Crontab 和@Adrian Klaver


推荐阅读