NodeJS 및 KnexJS를 사용하여 데이터를 저장하는 다양한 방법
11280 단어 knexnodejavascriptmysql
접근법 1:
async store ({ firstName, lastName }) {
try {
const [id] = await knex('users')
.insert({
first_name: firstName,
last_name: lastName
})
return id
} catch (error) {
throw error
}
}
용법:
await store({
firstName: 'Ernie Jeash',
lastName: 'Villahermosa'
})
그러나이 접근 방식은 열 수가 증가하면 지저분해집니다.
접근 2:
async store (payload) {
try {
const [id] = await knex('users')
.insert(payload)
return id
} catch (error) {
throw error
}
}
용법:
await store({
first_name: 'Ernie Jeash',
last_name: 'Villahermosa'
})
두 번째 접근 방식은 복잡하게 만들지 않고 배열과 개체를 모두 허용하지만 인식할 수 없는 열이 있는 경우 취약하고 쉽게 오류를 생성합니다.
접근법 3
const _pickBy = require('lodash/pickBy')
async store (payload) {
try {
const fillables = ['first_name', 'last_name']
const [id] = await knex('users')
.insert(_pickBy(payload, col => fillables.includes(col)))
return id
} catch (error) {
throw error
}
}
용법:
await store({
first_name: 'Ernie Jeash',
last_name: 'Villahermosa'
})
이 접근 방식은 두 번째 접근 방식과 비슷하지만 등록되지 않은 속성이 생략되기 때문에 오류가 발생하기 쉽습니다. 그러나 객체만 허용합니다. 충분히 다재다능하지 않습니다.
최종 접근
const _castArray = require('lodash/castArray')
const _pickBy = require('lodash/pickBy')
const _isNil = require('lodash/isNil')
async store (payload) {
const fillables = new Set([
'user_id',
'admin_id'
])
try {
const data = _castArray(payload)
.map(hay => _pickBy(hay, (val, key) => {
return !_isNil(val) && fillables.has(key)
}))
const [id] = await store.knex('users').insert(data)
return id
} catch (error) {
throw error
}
}
용법:
await store({
first_name: 'Ernie Jeash',
last_name: 'Villahermosa'
})
// or
await store([
{
first_name: 'Ernie Jeash',
last_name: 'Villahermosa'
},
{
first_name: 'Marielle Mae',
last_name: 'Valdez'
}
])
이 접근 방식은 조회 속도가 더 빠른 ES6
Set
를 활용합니다. 배열과 객체를 모두 허용합니다. 동시에 이전 접근 방식의 문제를 해결한 미등록 속성을 생략합니다. 나는 또한 lodash의 몇 가지 기능을 사용했습니다.추신: 새로운 제안에 열려 있습니다 😊
Reference
이 문제에 관하여(NodeJS 및 KnexJS를 사용하여 데이터를 저장하는 다양한 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/karmablackshaw/different-ways-of-storing-data-using-nodejs-and-knexjs-4723텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)