如何向hapi注册pg-promise



我尝试注册pg-promise作为hapi插件。但是,发生了以下错误。

TypeError: Cannot read properties of undefined (reading 'name')
at internals.Server.register (/home/kim.js/pgpromise/node_modules/@hapi/hapi/lib/server.js:456:42)
at init (/home/kim.js/pgpromise/hapi- pgtest .js:22:16)

我的代码如下,我也附上了一个参考网站。
Hapi教程-入门
Hapi教程-插件

'use strict';
const promise = require('bluebird');
const Hapi = require('@hapi/hapi');
const Pg = require('pg-promise')();
const postgreSql = {
host: '127.0.0.1',
port: 5432,
user: 'someone',
password: 'my_password',
database: 'my_db',
table_schema: 'public',
};
const init = async () => {
const server = Hapi.server({
port: 3000,
host: '192.168.9.23'
});  
await server.register([{    // ERROR is Here !!
plugin: Pg,
options: {
promiseLib: promise
}
}]);
server.route({     
method: 'GET',
path: '/',
handler: async (request, h) => {
let sql = 'SELECT FROM my_table limit 1';
let result = await pgp.one(sql).catch(error => { console.log(sql); });
return result;
}
});
const pgp = Pg(postgreSql);
await server.start();
console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();

英语不是我的母语,所以如果这句话很奇怪,请理解。

在我的项目中,我之前使用了一个名为hapi-pg-promise的插件,但是在hapi v20中出现了Hang。

我的错误是我试图注册模块,而不是插件。所以我参考了hapi插件文档,并通过参考hapi-pg-promise源代码修改了我的代码。

Make My happy -pg-promise

'use strict';
/* this is original source
const Hoek = require('hoek');
const PgPromise = require('pg-promise');
*/
const Hoek = require('@hapi/hoek');
const PgPromise = require('pg-promise')();
const pkg = require('./package.json');
const DEFAULTS = {
init: {},
cn: undefined
};
module.exports = {
pkg,
register: async function (server, options) {
const opts = Hoek.applyToDefaults(DEFAULTS, options);
const pgp = require('pg-promise')(opts.init);
const db = pgp(opts.cn);
server.ext('onPreHandler', (request, h) => {
request.db = db;
return h.continue;
});
server.expose('db', db);
server.events.on('stop', pgp.end);
}
};

之后,我注册了插件,它工作了:)

/* NOT this
const Pg = require('pg-promise')();
*/
const Pg = require('./myPlugins/my-hapi-pg-promise');

最新更新