【问题标题】:How a express to pass object to other file?如何快速将对象传递给其他文件?
【发布时间】:2021-07-15 23:10:40
【问题描述】:

在 app.js 中,express 运行时,express 会创建池连接。然后可以在其他文件中访问池实例。该怎么做?

app.js

const express = require('express');
const app = express();
const port = 8080;

const mysql = require('mysql2');
const comic = require('./routes/comic');

app.use('/comics', comic);

app.listen(port, () => {
  console.log(`Server is listening in ${port} port`);

  const pool = mysql.createPool({
    host:'localhost', 
    user: 'root',
    password: 'test', 
    database: 'test'
  });

  exports.connection = pool.promise();
});

test.js

const {connection} = require('./app');

(async () => {
  const [rows] = await connection.execute('SELECT * FROM people');
  
  console.log(rows);
})();

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    我建议您有一个单独的 db.js 文件,该文件将包含连接池并在必要时导入该池

    在 db.js 中

    const mysql = require('mysql2');
    const pool = mysql.createPool({
        host:'localhost', 
        user: 'root',
        password: 'test', 
        database: 'test'
      });
    module.exports = pool;
    

    在你想要的地方

    let pool = require('./db');
    
    const queryRes = (query, pool) => new Promise((resolve, reject) => {
        pool.getConnection(function(err, connection) {
            if(err) {
                reject('Error');
            } 
            connection.query(query, (err, results, fields) => {
                if(err) {
                    reject('Error');         
                }
                else{
                    connection.release();
                    resolve(results);
                }
            });
            connection.on('error', (err) => {
                reject('Error');
                connection.release();
            });
        });
    });
    
    queryRes("Select * from test", pool).then(result => {
        console.log(result);
    }).catch(err => {
        console.log(err);
    });
    
    

    【讨论】:

    • 如果是这样,它不是池的概念。池就像一个服务器。只运行 1 次。它介于请求和数据库之间。它与普通的 createConnection 不同。
    • 所以你只想调用 createPool 方法一次对吗??
    • 是的,调用 1 次,但在任何地方都使用池实例,因为我将在模型类中使用池实例。所以我在开始快速运行时启动池实例。
    • 所以上面的创建了一个单一的池并共享给整个项目。您可以将它导入到任何您想要的地方,并在池中调用 getConnection 函数。
    • 可以以承诺的方式做到吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多