Thank you very much Tim and Adrian for your very kind and valuable information and suggestions.
Marco Il giorno mar 21 apr 2020 alle ore 00:47 Tim Cross <theophil...@gmail.com> ha scritto: > > Marco Ippolito <ippolito.ma...@gmail.com> writes: > > > I'm trying to connect to a postgres database (Postgresql-11) within my > > nodejs-vue.js app, but in console I'm getting this error: > > > > [HMR] Waiting for update signal from WDS... > > pg.js?c8c2:27 Unable to connect to the database: TypeError: > net.Socket > > is not a constructor > > at new Connection > > (webpack-internal:///./node_modules/pg/lib/connection.js:22:34) > > at new Client > > (webpack-internal:///./node_modules/pg/lib/client.js:55:37) > > at Promise.tap.query > > (webpack-internal:///./node_modules/sequelize/lib/dialects/postgres > > /connection-manager.js:124:26) > > at ConnectionManager.connect > > (webpack-internal:///./node_modules/sequelize/lib/dialects > > /postgres/connection-manager.js:121:12) > > at eval > > > (webpack-internal:///./node_modules/sequelize/lib/dialects/abstract/connection- > > manager.js:318:50) > > From previous event: > > at ConnectionManager._connect > > (webpack-internal:///./node_modules/sequelize/lib/dialects > > /abstract/connection-manager.js:318:8) > > at ConnectionManager.getConnection > > (webpack-internal:///./node_modules/sequelize/lib/dialects > > /abstract/connection-manager.js:254:46) > > at eval > > (webpack-internal:///./node_modules/sequelize/lib/sequelize.js:640:36) > > From previous event: > > at eval > > (webpack-internal:///./node_modules/sequelize/lib/sequelize.js:631:53) > > at eval > > (webpack-internal:///./node_modules/retry-as-promised/index.js:70:21) > > at new Promise (<anonymous>) > > at retryAsPromised > > (webpack-internal:///./node_modules/retry-as-promised/index.js:60:10) > > at eval > > (webpack-internal:///./node_modules/sequelize/lib/sequelize.js:631:30) > > From previous event: > > at Sequelize.query > > (webpack-internal:///./node_modules/sequelize/lib/sequelize.js:580:23) > > at Sequelize.authenticate > > (webpack-internal:///./node_modules/sequelize/lib/sequelize.js:892:17) > > at eval (webpack-internal:///./src/plugins/db/pg.js:23:11) > > at Object../src/plugins/db/pg.js ( > https://ggc.world/js/app.js:1128:1 > > ) > > at __webpack_require__ (https://ggc.world/js/app.js:785:30) > > at fn (https://ggc.world/js/app.js:151:20) > > at eval (webpack-internal:///./src/main.js:16:72) > > at Module../src/main.js (https://ggc.world/js/app.js:1083:1) > > at __webpack_require__ (https://ggc.world/js/app.js:785:30) > > at fn (https://ggc.world/js/app.js:151:20) > > at Object.1 (https://ggc.world/js/app.js:1141:18) > > at __webpack_require__ (https://ggc.world/js/app.js:785:30) > > at checkDeferredModules (https://ggc.world/js/app.js:46:23) > > at https://ggc.world/js/app.js:861:18 > > at https://ggc.world/js/app.js:864:10 > > > > In /src/main.js : > > > > import '@/plugins/db/pg'; > > > > (base) /src/plugins/db$ ls -lah > > total 28K > > drwxr-xr-x 6 marco marco 4,0K apr 20 15:42 . > > drwxr-xr-x 3 marco marco 4,0K apr 20 15:41 .. > > drwxr-xr-x 2 marco marco 4,0K apr 20 17:20 config > > drwxr-xr-x 2 marco marco 4,0K apr 20 15:48 migrations > > drwxr-xr-x 2 marco marco 4,0K apr 20 15:48 models > > -rw-r--r-- 1 marco marco 819 apr 20 08:53 pg.js > > drwxr-xr-x 2 marco marco 4,0K apr 20 17:21 seeders > > > > > > nano pg.js > > > > const { Pool } = require('pg'); > > const { Sequelize } = require('sequelize'); > > const pool = new Pool(); > > const sequelize = new Sequelize('pusers', 'postgres', 'pwd', { > > host: 'localhost', > > dialect: 'postgres', > > pool: { > > max: 5, > > min: 0, > > acquire: 30000, > > idle: 10000 > > } > > }); > > sequelize > > .authenticate() > > .then(() => { > > console.log('Connection has been established successfully.'); > > }) > > .catch(err => { > > console.log('Unable to connect to the database:', err); > > }); > > > > module.exports = { > > query: (text, params, callback) => { > > return pool.query(text, params, callback); > > }, > > } > > > > Populated the sample database with a row: > > > > pusers=# SELECT schemaname,relname,n_live_tup > > pusers-# FROM pg_stat_user_tables > > pusers-# ORDER BY n_live_tup DESC; > > schemaname | relname | n_live_tup > > ------------+---------------+------------ > > public | pusers | 1 > > public | SequelizeMeta | 1 > > (2 rows) > > > > I read here: > > > https://stackoverflow.com/questions/40599069/node-js-net-socket-is-not-a-constructor > > that > > "there are no plain TCP sockets in the browser, so that is why trying to > > use `net.Socket` in the browser (via webpack, browserify, etc.) won't > work" > > > > Environment Info: > > > > System: > > OS: Linux 5.3 Ubuntu 18.04.4 LTS (Bionic Beaver) > > CPU: (8) x64 Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz > > Binaries: > > Node: 12.15.0 - ~/.nvm/versions/node/v12.15.0/bin/node > > Yarn: 1.22.4 - ~/.nvm/versions/node/v12.15.0/bin/yarn > > npm: 6.14.4 - ~/.nvm/versions/node/v12.15.0/bin/npm > > Browsers: > > Chrome: 81.0.4044.92 > > Firefox: 75.0 > > npmGlobalPackages: > > @vue/cli: 4.2.3 > > > > So... how to solve the problem? > > Looking forward to your kind help. > > Marco > > This has nothing to do with postgres. This is a purely Javascript issue > combined with differences between the browser Javascript API and node > javascript API. > > Bottom line - if your trying to connect directly to a PG database from > within Javascript code running inside the browser, it won't work. The > browser does not have the 'net' library. You can only do this from > within node.js. Likewise, references to express are also red hearings - > you don't have a web server inside the browser either. If your not > trying to develop inside the browser but are in fact developing at the > node.js level, then you don't need webpack. > > I think what you really need to do is step back and look closer at your > architecture. Typically, you would put all your database interaction > stuff in the web server using node.js. A common design pattern would be > to use one of the node.js web servers, like express (but there are > others) and have something like nginx as a proxy server in front of it. > You would then wrap your database interaction in a node.js API which you > would then call from your client browser using http/https or web > sockets. > > -- > Tim Cross >