



아래와 같이 API를 단축하여 사용하려면 환경변수(environmental variables) 설정이 필요합니다.SELECT_QUERY_DEV_RO로 설정하는 경우DEV_RO로 활용합니다.
Copy
title: Team
state:
id:
name:
blocks:
- type: search
params:
- key: id
- key: name
buttons:
- label: Search
type: submit
clickFn: |
const {state, $modal, $router} = opt
await state.reload(opt)
- type: table
fetchFn: |
state.reload = async () => {
if (state.id) {
const r = await query('DEV_RO', `
SELECT id, name, domain, plan
FROM Team
WHERE id = ${ +state.id || 0}
LIMIT 100
`)
return params.$result(r)
}
else if (state.name) {
const r = await query('DEV_RO', `
SELECT id, name, domain, plan
FROM Team
WHERE name LIKE '%${ state.name }%'
LIMIT 100
`)
return params.$result(r)
}
else {
const r = await query('DEV_RO', `
SELECT id, name, domain, plan
FROM Team
LIMIT 100
`)
return params.$result(r)
}
}
return state.reload()
autoHeader: true
Copy
router.post('/wYq7jE-KU12dzZnliNdcS/readonly-query', async (req, res, next) => {
try {
// 설정 JWT Secret에서 설정한 값
const token = jwt.verify(req.body.token, 'FQfJz6Af8k5QkPIhjdIwXsPXrqebMxrX')
// 사내 보안 단계에 따른 필터링
if (!token.email.endsWith('@selectfromuser.com')) {
throw StatusError(400, '인증 실패')
}
// query('RESOURCE', 'sql', {id: 1000}) 자유롭게 bind parameter 구성 가능합니다.
// 해당 예시에서는 모두 실행합니다.
const master = await getConnection('mysql.slave')
const rows = await master.query(req.body.query)
res.status(200).json({
message: 'ok',
rows,
})
} catch (e) {
res.status(200).json({
message: e.message,
error: e,
})
}
})

