簡體   English   中英

如何管理 node-mysql 數據庫連接?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM