使用Async/Await和数组映射将数据插入到postgres表中



我是promise的新手,不确定下面的代码中缺少了什么,因为不幸的是,我的req.body作业组没有插入到我的postgres表中。

在我的index.js express代码中,我有以下内容。仅供参考,代码的某些部分被遗漏了。

req.body的值为:

{
"jobName": "ABC",
"jobType": "1",
"jobGroups": [
{
"jobGroupName": "A1",
},
{
"jobGroupName": "B2",
}       
]
}

当我从客户端调用路由/process-job时,我看到记录是在my_jobs表中创建的,但在处理my_job_groups表时,没有插入任何内容。

我基本上需要使用从my_jobs插入返回的job_id在my_job_groups表中创建A1和B2。

不确定我是否正确使用了promise和async/await?

const express = require("express");
const app = express();
const cors = require("cors");
const pool = require("./db");

app.post("/process-job", async (req, res) => {
try {
const { jobName, jobType } = req.body
const jobDetails = req.body.jobGroups;
const theJob = await pool.query(        
"INSERT INTO my_jobs (job_name, job_type) VALUES($1, $2) RETURNING job_id", 
[ jobName, jobType ]
);
let jobId = theJob.rows[0];
try {
const promises = jobDetails.map(async jobDetail => {       
let newJob = await pool.query(        
"INSERT INTO my_job_groups (job_id, job_group_name) VALUES($1, $2) RETURNING job_group_id", 
[ jobId, jobDetails.jobGroupName ]
);
return {
id: newJob.rows[0]
}
})
const results = await Promise.all(promises)
} catch(err) {
console.error(err.messasge);
}
} catch(err) {
console.error(err.messasge);
}
})

只需将所有代码封装到一个try/catch块中就足够了。当插入到my_job_groups时,job_group_name应该是jobDetail.jobGroupName而不是jobDetails.jobGroupName

而且,我认为如果您的API向客户端返回响应应该更好。

const express = require("express");
const app = express();
const cors = require("cors");
const pool = require("./db");

app.post("/process-job", async (req, res) => {
try {
const { jobName, jobType, jobGroups: jobDetails } = req.body // destruct to get all properties
const job = await pool.query(
"INSERT INTO my_jobs (job_name, job_type) VALUES($1, $2) RETURNING job_id",
[jobName, jobType],
);
const jobId = job.rows[0];
const promises = jobDetails.map(async jobDetail => {
const newJob = await pool.query(
"INSERT INTO my_job_groups (job_id, job_group_name) VALUES($1, $2) RETURNING job_group_id",
[jobId, jobDetail.jobGroupName] // jobDetail.jobGroupName instead of jobDetails.jobGroupName
);
return {
id: newJob.rows[0],
};
});
const result = await Promise.all(promises);
res.json(result);
} catch (err) {
console.error(err); // print out message object
res.status(500).json({ message: err.message }); // response with status 500
}
});