lex*_*_sa 5 javascript postgresql pool node.js express
我正在使用 postgresql 数据库创建 nodejs 后端应用程序。我想要的是,一旦在 db.js 文件中创建了与数据库的连接,我就可以在其他文件中重用它来执行查询。
这是我的 db.js 文件
const pool = new Pool({
user: 'us',
host: 'localhost',
database: 'db',
password: 'pass',
port: 5432,
})
pool.on('connect', () => {
console.log('connected to the Database');
});
module.exports = () => { return pool; }
Run Code Online (Sandbox Code Playgroud)
这就是我尝试在 index.js 文件中使用它的方法
const db = require('./db.js')
app.get('/', (request, response) => {
db().query('SELECT * FROM country'), (error, results) => {
if (error) {
response.send(error)
}
console.log(results)
response.status(201).send(results)
}
})
Run Code Online (Sandbox Code Playgroud)
没有任何错误,当我转到这个特定页面时,它会继续加载。控制台中也没有任何内容。
但是,如果我在 db.js 文件中编写一个函数并执行类似的操作pool.query(...),将其导出,然后在我的 index.js 中编写app.get('/', exportedFunction),则一切正常。
有没有办法不将所有(例如 50 个)查询写入一个(db.js)文件中,因为我想稍微组织一下我的项目?
要完全简化您的项目结构,如果您从头开始,可以尝试以下操作:
索引.js
const express = require('express');
const app = express();
const PORT = 8080;
const bodyparser = require('body-parser');
const baseRouter = require('../your-router');
app.use(bodyparser.json());
app.use(express.json());
app.use('/', baseRouter);
app.listen(PORT, function () {
console.log('Server is running on PORT:', PORT);
});
Run Code Online (Sandbox Code Playgroud)
你的路由器.js
const Router = require('express');
const router = Router();
const getCountries = require('../handlers/get');
router.get('/check-live', (req, res) => res.sendStatus(200));
// route for getCountries
router.get('/countries', getCountries);
Run Code Online (Sandbox Code Playgroud)
src/handler/get.js
const YourService = require('./service/your-service');
function getCountries(request, response) {
const yourService = new YourService();
yourService.getCountries(request)
.then((res) => { response.send(res); })
.catch((error) => { response.status(400).send({ message: error.message }) })
}
module.exports = getCountries;
Run Code Online (Sandbox Code Playgroud)
src/service/your-service.js
const connectionPool = require('../util/dbConnect');
class yourService {
getCountries(req) {
return new Promise(((resolve, reject) => {
connectionPool.connect((err, db) => {
if (err) reject(err);
let query = format('SELECT * FROM country'); // get inputs from req
db.query(query, (err, result) => {
if (err) reject(err);
resolve(result);
})
});
}));
}
}
module.exports = yourService;
Run Code Online (Sandbox Code Playgroud)
dbConnect.js
const pgCon = require('pg')
const PGUSER = 'USER'
const PGDATABASE = 'localhost'
let config = {
user: PGUSER,
database: PGDATABASE,
max: 10,
idleTimeoutMillis: 30000
}
let connectionPool = new pgCon.Pool(config);
module.exports = connectionPool;
Run Code Online (Sandbox Code Playgroud)
请将此视为一个基本示例,重构您的代码以使用回调/异步等待(在上面的示例中,您可以只使用不需要转换为承诺的回调),如果需要 - 您可以从服务层进行数据库层调用为了从服务层提取数据库方法。
| 归档时间: |
|
| 查看次数: |
2524 次 |
| 最近记录: |