TIL-211222
5820 ワード
SQL queryデータベースクエリは非同期要求 です.コントローラは、入力データオブジェクトを二重配列として作成し、バッチ をテーブルに挿入する. values (?, ?) or value ? : ?入力する位置を変数としてスケール params = []; 変数が少ない場合は、 を直接入れることができます.
// post에 대한 models에서의 처리
post: (userId, orders, totalPrice, callback) => {
// 각 변수에 대응하는 쿼리문을 작성, 총 4개의 변수
// query절을 변수에 미리 짜 두고, ?을 넣어 변수로 사용함
const str1 = `INSERT INTO orders (user_id, total_price) VALUES (?, ?)`;
// params를 저장하여 사용할 수 있음, 혹은 params 자리에 [userId, totalPrice]를 직접 넣어도 가능
let params = [userId, totalPrice];
db.query(str1, params, (error, result) => {
// result의 값의 유무에 따라 분기 시킴
// 두 테이블에서의 데이터를 불러오기 위해, 이중 쿼리문으로 작성하였음
// 단, 콜백은 1회만 가능하므로(요청1에 응답1) 콜백은 맨 아래에 한번만 작성한다
if (result) {
const str2 = `INSERT INTO order_items (order_id, item_id, order_quantity) VALUES ?`
// 변수를 적절하게 받아오기 위해, map함수를 통하여 데이터를 받아온다
const params = orders.map((order) => {
// result.insertId의 경우 orders에 쿼리를 통하여 생성된 id가 오게 된다, 또한 이를 orders와 order_items 두 테이블의 연결을 위해 order_id에 넣어준다
return [result.insertId, order.itemId, order.quantity]
});
return db.query(str2, [params], (error, result) => {
if (error) callback(error, null)
else callback(null, result)
})
} else {
callback(error, null)
}
})
}
Reference
この問題について(TIL-211222), 我々は、より多くの情報をここで見つけました https://velog.io/@ebiny/TIL-211222テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol