Node.js рдФрд░ Oracle рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде REST API рдмрдирд╛рдирд╛ред рднрд╛рдЧ реи

рднрд╛рдЧ 2: рдПрдХ рд░реАрд╕реНрдЯ рдПрдкреАрдЖрдИ рдмрдирд╛рдирд╛: рдбреЗрдЯрд╛рдмреЗрд╕ рдореВрд▓ рдмрд╛рддреЗрдВ


рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдЖрдкрдиреЗ рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдмрдирд╛рдпрд╛, рдпрд╣рд╛рдВ рдЖрдк рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдиреЛрдб-рдСрд░реНрдХреЗрд▓реНрдбрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╕рд░рд▓ рдмрдпрд╛рдиреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдкреВрд▓ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдЬрд╛рд░реА рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓


рдХреНрдпреЛрдВрдХрд┐ рдиреЛрдб- oracledb OCI рдХреНрд▓рд╛рдЗрдВрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ OCI рдкреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд╣реИрдВ рдФрд░ рдЙрддреНрдХреГрд╖реНрдЯ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓реЗ рд╣реИрдВред рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдХреЛ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВред

module.exports = { hrPool: { user: process.env.HR_USER, password: process.env.HR_PASSWORD, connectString: process.env.HR_CONNECTIONSTRING, poolMin: 10, poolMax: 10, poolIncrement: 0 } }; 

рдЬреИрд╕рд╛ рдХрд┐ config / webserver.js рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╣реИ, рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдЧреБрдг рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╕рдордп рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЪреАрд▓рд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдмрд╛рд╣рд░ рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдЕрдиреНрдп рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмрдЪрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЖрд╡рд╢реНрдпрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЯрд░реНрдорд┐рдирд▓ рд╕рддреНрд░реЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

 echo "export HR_USER=hr" >> ~/.bashrc echo "export HR_PASSWORD=oracle" >> ~/.bashrc echo "export HR_CONNECTIONSTRING=0.0.0.0/orcl" >> ~/.bashrc source ~/.bashrc 

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреВрд▓рдорд╛рдЗрди рдФрд░ рдкреВрд▓рдореИрдХреНрд╕ рдПрдХ рд╣реА рдереЗ рдФрд░ рд╡рд╣ рдкреВрд▓рдЗрдиреНрдХреНрд░рд┐рдореЗрдВрдЯ реж. рдкрд░ рд╕реЗрдЯ рдерд╛ред рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХрд╛ рдкреВрд▓ рдмрдирд╛рдПрдЧрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрдо рдкреНрд░рдмрдВрдзрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдкреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рд▓рдЧрд╛рддрд╛рд░ рдЙрдкрдпреЛрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, Node.js рдХреЛ рдЕрдХреНрд╕рд░ "рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб" рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдереНрд░реЗрдб рдкреВрд▓ рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЕрдиреНрдпрдерд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдереНрд░реЗрдб рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЛрдб-рдСрд░реНрдХреЗрд▓реНрдб рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рд╕рднреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ SQL рдФрд░ PL / SQL рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдереНрд░реЗрдб рдкреВрд▓ рдХрд╛ рдЖрдХрд╛рд░ 4. рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреВрд▓ рдореЗрдВ рд╕рднреА 10 рдХрдиреЗрдХреНрд╢рди рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ, рддреЛ рдЖрдкрдХреЛ рддрджрдиреБрд╕рд╛рд░ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

UV_THREADPOOL_SIZE рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдереНрд░реЗрдб рдкреВрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред UV_THREADPOOL_SIZE рдХреЛ Node.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдереНрд░реЗрдб рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реА рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдереНрд░реЗрдб рдкреВрд▓ рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж, рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЬрдбрд╝ рдореЗрдВ index.js рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ (рдЬрд┐рд╕рдореЗрдВ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ) рдХреЗ рдмрд╛рдж рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реЗрдВред

 // *** line that requires services/web-server.js is here *** const dbConfig = require('./config/database.js'); const defaultThreadPoolSize = 4; // Increase thread pool size by poolMax process.env.UV_THREADPOOL_SIZE = dbConfig.hrPool.poolMax + defaultThreadPoolSize; 

рдЕрдм рдЬрдм рдереНрд░реЗрдб рдкреВрд▓ рдХрд╛ рдЙрдкрдпреБрдХреНрдд рдЖрдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╛рдо рдХреА рд╕реЗрд╡рд╛рдУрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдирд┐рдореНрди рдХреЛрдб рдХреЛ рдЗрд╕рдореЗрдВ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВред
 const oracledb = require('oracledb'); const dbConfig = require('../config/database.js'); async function initialize() { const pool = await oracledb.createPool(dbConfig.hrPool); } module.exports.initialize = initialize; 

рдпрд╣ рдореЙрдбреНрдпреВрд▓ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдиреЛрдб-рдСрд░реНрдХреЗрд▓реНрдбрдм рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред рдлрд┐рд░ рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд╛рдо рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рддрдм рдореЙрдбреНрдпреВрд▓.рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХреИрд╢ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред

рдЕрдм рдЖрдкрдХреЛ рд╕рдм рдХреБрдЫ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рдЦреБрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПред Index.js рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдкрдВрдХреНрддрд┐ 1 рдХреЗ рдиреАрдЪреЗ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВред
 // *** line that requires services/web-server.js is here *** const database = require('./services/database.js'); 

рдлрд┐рд░ рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореМрдЬреВрджрд╛ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреНрд░реИрдЯрдЕрдк рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдкреНрд░рдпрд╛рд╕ рдмреНрд▓реЙрдХ рдХреЛ рдЬреЛрдбрд╝реЗрдВред

 try { console.log('Initializing database module'); await database.initialize(); } catch (err) { console.error(err); process.exit(1); // Non-zero failure code } // *** existing try block in startup here *** 

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдЖрдк рдиреЛрдб- oracledb рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Hr_app рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдХрд┐рд╕реА рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдирд┐рдореНрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБред

 npm install oracledb -s node . 

рдпрджрд┐ рдЖрдк рд╕рдВрджреЗрд╢ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЙрдбреНрдпреВрд▓ рдФрд░ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ, рддреЛ, рдмрдзрд╛рдИ - рдЖрдкрдХрд╛ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ!

рд╢рдЯрдбрд╛рдЙрди рдХрдиреЗрдХреНрд╢рди рдкреВрд▓


рдпрджрд┐ рдЖрдк рдЕрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ (ctrl + c рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣), рддреЛ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдмрдВрдж рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ Node.js рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджреНрдпрдкрд┐ рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди Node.js. рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред

рд╕реЗрд╡рд╛рдУрдВ / database.js рдлрд╝рд╛рдЗрд▓ рдкрд░ рд▓реМрдЯреЗрдВ, рдХреЛрдб рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрдВрдд рддрдХ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдЕрджреНрдпрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВред

 // *** previous code above this line *** async function close() { await oracledb.getPool().close(); } module.exports.close = close; 

рд╕рдореНтАНрдорд┐рд▓рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреВрд▓ рдХреЛ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП oracledb.getPool () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд▓ рдкрд░ рдмрдВрдж рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

рдХреНрд▓реЛрдЬрд╝ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд╣реА рд╕рдордп рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореМрдЬреВрджрд╛ рдЯреНрд░рд╛рдпрд▓ рдмреНрд▓реЙрдХ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╢рдЯрдбрд╛рдЙрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ index.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдб рдХреА рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рд░реЛрдХрддреА рд╣реИрдВред

 // *** existing try-catch block in shutdown here *** try { console.log('Closing database module'); await database.close(); } catch (err) { console.log('Encountered error', e); err = err || e; } 

рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдФрд░ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛рдмреЗрд╕ рдореЙрдбреНрдпреВрд▓ рдмрдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗред

рд╕рд░рд▓ CRUD рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдВ


рдиреЛрдб- oracledb рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ SQL рдпрд╛ PL / SQL рдХреЛрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЖрдорддреМрд░ рдкрд░ рдПрдХ рддреАрди-рдЪрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ: рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдХрдиреЗрдХреНрд╢рди рдЬрд╛рд░реА рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рд╕рдм рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдХрд░реЗрдВ (рдХреЛрдИ рдорд▓реНрдЯреА-рд╕реНрдЯреЗрдк рд▓реЗрди-рджреЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ), рддреЛ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЬрд╛рд░реА рдХрд░рдирд╛ рдорд╛рдирдХ рдХреЛрдб рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдХреЙрд▓ рдореЗрдВ рд╕рднреА рддреАрди рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИред рд╕реЗрд╡рд╛рдУрдВ / database.js рдлрд╝рд╛рдЗрд▓ рдкрд░ рд▓реМрдЯреЗрдВ, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВред

 // *** previous code above this line *** function simpleExecute(statement, binds = [], opts = {}) { return new Promise(async (resolve, reject) => { let conn; opts.outFormat = oracledb.OBJECT; opts.autoCommit = true; try { conn = await oracledb.getConnection(); const result = await conn.execute(statement, binds, opts); resolve(result); } catch (err) { reject(err); } finally { if (conn) { // conn assignment worked, need to close try { await conn.close(); } catch (err) { console.log(err); } } } }); } module.exports.simpleExecute = simpleExecute; 

рдЖрдорддреМрд░ рдкрд░, рдЖрдк рд╡реЗрдм рд╕рд░реНрд╡рд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЕрднреА рдЬреЛрдбрд╝реЗрдВ рдХрд┐ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕реЗрд╡рд╛рдУрдВ / рд╡реЗрдм-рд╕рд░реНрд╡рд░.рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рд╢реАрд░реНрд╖ рдкрд░ рдореМрдЬреВрджрд╛ рдирд┐рд░рдВрддрд░ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рддрд╣рдд рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВред

 // line that requires ../config/web-server.js here const database = require('./database.js'); 

рдлрд┐рд░ рд╕рдВрдкреВрд░реНрдг App.get рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред (рд╕рднреА 3 рд▓рд╛рдЗрдиреЗрдВ)ред

 // *** line that adds morgan to app here *** app.get('/', async (req, res) => { const result = await database.simpleExecute('select user, systimestamp from dual'); const user = result.rows[0].USER; const date = result.rows[0].SYSTIMESTAMP; res.end(`DB user: ${user}\nDate: ${date}`); }); 

рдирдпрд╛ рд╣реИрдВрдбрд▓рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдореМрдЬреВрджрд╛ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рд╕рд┐рд╕реНрдЯрд┐рдорд╕реНрдЯреИрдореНрдк рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ simpleExecute рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдбрд╛рдпрдирд╛рдорд┐рдХ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдЬрд╛рдПрдВ: 3000ред рдЖрдкрдХреЛ рдирд┐рдореНрди рдЫрд╡рд┐ рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬ рджреЗрдЦрдиреА рдЪрд╛рд╣рд┐рдПред

рдЫрд╡рд┐

рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдЖрдк GET рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд░реВрдЯрд┐рдВрдЧ, рдХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд▓реЙрдЬрд┐рдХ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдПрдкреАрдЖрдИ рдмрдирд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред

Source: https://habr.com/ru/post/hi473346/


All Articles