[英]How to manage node-mysql database connections?
嗨,我正在使用 NodeJS express 框架和express-handlebars
作為我的渲染引擎構建一個招聘應用程序。 問題是當我發布一個新的工作列表並將其保存到我的node-mysql
數據庫然后刷新工作列表頁面時,直到我重新啟動我的 nodejs 服務器后,UI 才包含新添加的帖子。 這顯然在生產中並不理想。 我該如何糾正這個問題? 以下是我目前有問題的解決方案:
數據庫連接:
const mysql = require('mysql');
const connection = mysql.createConnection({
host : 'localhost',
user : 'user',
password : 'pass',
database:'myjobsdb'
});
connection.connect(err=> {
console.log('Oops!, Failed to connect to the database.');
})
module.exports = connection;
這是獲取這些列表的文件
const connection = require('./database')
function fetchAll( searchObj,callback ){
let sql = `SELECT *, jobs.id AS job_id FROM jobs JOIN companies JOIN accounts JOIN countries WHERE jobs.status != 'Deleted' AND jobs.company = companies.email AND companies.email = accounts.email_address AND countries.zip = companies.country `;
if(searchObj.location != '' && searchObj.location != null && searchObj.location != undefined){
sql += ` AND (jobs.location LIKE '%${searchObj.location}%' OR countries.country_name LIKE '%${searchObj.location}%') `
}
if(searchObj.keyword != '' && searchObj.keyword != null && searchObj.keyword != undefined){
sql += ` AND (jobs.job_description LIKE '%${searchObj.keyword}%' OR jobs.job_title LIKE '%${searchObj.keyword}%') `
}
sql += ' ORDER BY jobs.id DESC'
console.log(sql);
connection.query(sql, (err, results)=>{
if(err){
callback([])
}else{
callback(results)
}
})
}
module.exports = {fetchAll}
我將此文件導入到處理工作列表路線的腳本中,並通過 express-handlebars 將結果動態呈現到列表中。 方法如下:
module.exports = (router)=>{
const account = require("../account")
const jobs = require('../jobs')
const tasks = require('../tasks')
const messages = require('../messages')
const freelancers = require('../freelancers')
let jobs_list
jobs.fetchAll({'location':'','keyword':''}, response=>{
jobs_list = response
})
router.get(['/','/home'],(req,res)=>{
//console.log(`Jobs returned : ${JSON.stringify(jobs_list)}`)
if(req.session.username && req.session.username != null && req.session.username != ''){
messages.ComposeMessages(req.session.username, response => {
let msg = response.data
account.get(req.session.username, req.session.acc_type, response=>{
let mydata = response.data
freelancers.get(response => {
freelancers_list = response
res.render('home',{
'title':'Home',
'footer':true,
'jobs':jobs_list,
'freelancer':freelancers_list,
'messages':msg,
'session':true,
'mydata':mydata,
'acc_type':req.session.acc_type
})
})
})
})
}else{
freelancers.get(response => {
freelancers_list = response
res.render('home',{
'title':'Home',
'footer':true,
'jobs':jobs_list,
'freelancer':freelancers_list,
'session':false,
'acc_type':req.session.acc_type
})
})
}
})
return router
};
您看到陳舊數據並必須重新啟動應用程序的原因是因為fetchAll()
僅在啟動期間執行,而不是在每次調用作業列表頁面時執行。 將其移至 controller 方法以解決此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.