I’m using lib “pg” to connect to a PostgreSQL instance.
It works running local, but not in production:
Pool is not a constructor
manifest.json
{
"platform-version": "2.0",
"product": {
"freshdesk": {
"location": {
"ticket_sidebar": {
"url": "ticket_sidebar.html",
"icon": "styles/images/icon.svg"
},
"full_page_app": {
"url": "full_page_app.html",
"icon": "styles/images/icon.svg"
}
}
}
},
"dependencies": {
"postman-request": "2.88.1-postman.28",
"btoa": "1.2.1",
"xml2js": "0.4.23",
"util": "0.12.3",
"async": "3.2.0",
"pg": "8.6.0",
"url": "0.11.0",
"tough-cookie": "4.0.0"
},
"whitelisted-domains": [
"https://*.freshdesk.com",
]
}
server/lib/queue.js
const { Pool } = require("pg");
var pg;
class Queue {
constructor(host, port, user, password, database) {
pg = new Pool({
user: user,
host: host,
database: database,
password: password,
port: port,
});
}
async testConnection() {
try {
await pg.query("SELECT NOW() as now");
} catch (error) {
throw new Error("> Queue > testConnection() - " + error.message);
}
}
}
exports.class = Queue;
server/server.js:
const Queue = require("./lib/queue");
var queue;
exports = {
events: [
{ event: "onAppInstall", callback: "onAppInstallCallback" },
{ event: "onTicketCreate", callback: "onTicketCreateHandler" },
{ event: "onTicketUpdate", callback: "onTicketUpdateHandler" },
{ event: "onConversationCreate", callback: "onConversationCreateHandler" },
{ event: "onExternalEvent", callback: "onExternalEventHandler" },
],
...
pgAuthenticate: function (options) {
queue = new Queue.class(options.pgHost, options.pgPort, options.pgUser, options.pgPassword, options.pgDatabase);
queue
.testConnection()
.then(() => {
renderData(undefined, undefined);
})
.catch((error) => {
console.error(error);
renderData(error);
});
},
};
config/assets/iparams.js
...
async function pgAuthenticate(options) {
return new Promise((resolve, reject) => {
client.request.invoke("pgAuthenticate", options).then(
(data) => {
resolve(data.response);
},
(error) => {
reject(error);
}
);
});
}
...
The “pgAuthenticate” method is called when clicked in a button on the installation page.
I described here the issue with “pg”, but the same is happening with another lib I’m using: “xml2js”.