我有以下简单的节点应用程序将数据插入postgres数据库:
var pg = require('pg');
var dbUrl = 'tcp://user:psw@localhost:5432/test-db';
pg.connect(dbUrl, function(err, client, done) {
for (var i = 0; i < 1000; i++) {
client.query(
'INSERT into post1 (title, body, created_at) VALUES($1, $2, $3) RETURNING id',
['title', 'long... body...', new Date()],
function(err, result) {
if (err) {
console.log(err);
} else {
console.log('row inserted with id: ' + result.rows[0].id);
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
在终端中运行节点app.js后,它会在数据库中插入1000行,然后应用程序挂起,并且不会终止.我做错了什么?我已经研究过pg模块的例子,但没有发现我做的事情不同......
我有以下使用node-postgres的代码:
var client = new pg.Client(conString);
client.connect(function(err) {
if(err) {
throw new Error(console.error('could not connect to postgres '+ err));
}
});
client.query('select * from public.spatial_ref_sys', function(err, result){
console.log('ffdafda');
throw new Error('kokpokopko');
});
Run Code Online (Sandbox Code Playgroud)
我认为执行此代码时,“ ffdafda”将被打印到屏幕上,并抛出一条错误消息“ kokpokopko”。我什至在调试器中永不中断地插入了一个断点。由于这些事情永远不会发生,因此我假设从未调用过回调。
我需要某种选项来调用回调吗?我正在阅读文档,但看不到任何东西。
重要的是要注意client.query被调用。我已经通过检查其返回值证明了这一点。
非常感谢你!
我正在使用Node.js,Postgres和node-postgres库.当我尝试使用如下代码插入当前日期的新记录时:
client.query('INSERT INTO ideas(date) VALUES($1)', [new Date()], ...);
Run Code Online (Sandbox Code Playgroud)
这样运行正常,没有错误.但是,当我对数据库运行select语句并记录结果时,我给出的日期显示为:
Wed Nov 20 2013 19:00:00 GMT-0500 (EST)
Run Code Online (Sandbox Code Playgroud)
这很好,除了当我插入记录时,它是11月21日星期四.时间是5:47,而不是7:00,因为输出会显示.
我再运行了几次代码,无论时间是什么,它都存储了相同的不准确日期,即使下一个小时开始也是如此.这让我相信,由于某种原因,它只存储日期而不是小时或分钟.此外,日期只有一天的事实表明问题可能与node-postgres处理日期的方式有关.
我知道Javascript在将它传递给查询时计算当前日期并不是问题,因为我记录了new Date()它并且它是准确的,日期,分钟,小时和秒.
任何有关这个问题的帮助将不胜感激.谢谢!
我是Node.js和Express的新手.
如何在"routes/index.js"中访问名为"pg"的"app.js"中创建的变量?
app.js
/**
* Module dependencies.
*/
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
var pg = require('pg');
var conString = "postgres://someuser:somepass@localhost/postgres"
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
Run Code Online (Sandbox Code Playgroud)
路线/ index.js
/*
* GET home page.
*/
exports.index = function(req, res){
var client = new pg.Client(conString);
client.connect(function(err) { …Run Code Online (Sandbox Code Playgroud) 我在nodejs中使用以下代码使用pg(https://github.com/brianc/node-postgres)我的代码为员工创建订阅就是这样.
client.query(
'INSERT INTO subscriptions (subscription_guid, employer_guid, employee_guid)
values ($1,$2,$3)', [
datasetArr[0].subscription_guid,
datasetArr[0].employer_guid,
datasetArr[0].employee_guid
],
function(err, result) {
done();
if (err) {
set_response(500, err, res);
logger.error('error running query', err);
return console.error('error running query', err);
}
logger.info('subscription with created');
set_response(201);
});
Run Code Online (Sandbox Code Playgroud)
您已经注意到datasetArr是一个数组.我想一次为多个员工创建大量订阅.但是我不想循环遍历数组.有没有办法用pg开箱即用?
说我有以下postgreSQL复合类型:
CREATE TYPE myType AS(
id bigint,
name text,
);
Run Code Online (Sandbox Code Playgroud)
以及除该类型外的存储过程:
CREATE FUNCTION myFunction(mt myType){
//do some stuff
}
Run Code Online (Sandbox Code Playgroud)
我想使用node-postgres模块从Node-js调用此过程。
var pg = require('pg');
var connectionString = "connection string";
pg.connect(connectionString, function(err, client, done) {
client.query('SELECT myFunction($1)', [some value],
function(err, result) {
// do stuff
done();
});
});
Run Code Online (Sandbox Code Playgroud)
如何在JS中创建这样的类型?有没有一种方法可以将类型从Node传递到Postgres存储过程?
我正在使用nodejs作为我的REST api主机。整体功能非常基础。也就是说,进行一个REST调用,该调用应该执行postgres db查询并返回数据。我遇到的问题是整个代码的组织。
我有具有基本初始化的server.js。现在,我应该在哪里放置postgres连接,并在需要时调用它来查询db。当前结构如下。所以我认为我应该将postgres连接代码移到server.js?什么是正确的结构
server.js
"use strict";
var express = require('express'),
app = express(),
port = process.env.PORT || 4001,
bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(function (req, res, next) {
// Website you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', '*')
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
// Set to true if you need the website to include cookies in the requests …Run Code Online (Sandbox Code Playgroud) 我正在尝试集成node-postgres驱动程序并学习做一个简单的 CRUD 操作。在我的app.js,我做这样的事情:
...
var postgres = require('./adapters/postgres')
var postClient = new postgres(conf);
...
postClient.connect(function (dbconn) {
app.dbconn = dbconn;
app.conf = conf;
console.log("************************************************************");
console.log(new Date() + ' | CRUD Server Listening on ' + conf['web']['port']);
console.log("************************************************************");
server.listen(conf['web']['port']);
var Routes = require('./routes/http-routes');
new Routes(app);
});
Run Code Online (Sandbox Code Playgroud)
在我的adapters/postgres.js文件中,我有以下内容:
const Client = require('pg');
const postClient = new Client(conf)({
host: conf['postgres'].host,
port: conf['postgres'].port,
dbname: conf['postgres'].dbname,
username: conf['postgres'].username,
password: conf['postgres'].password,
dbconn: null,
});
module.exports = postClient;
postClient.prototype.connect = function …Run Code Online (Sandbox Code Playgroud) 我正在尝试DOCUMENT使用node-postgres查询在我的 postgres 数据库中调用的模式。
我似乎无法针对指定的架构运行查询。
此查询使用 psql 直接针对 postgres 运行良好
SELECT * FROM "DOCUMENT".document_metadata m
LEFT OUTER JOIN "DOCUMENT".document_attributes a
ON a.document_id = m.id
Run Code Online (Sandbox Code Playgroud)
此代码产生以下错误
SELECT * FROM "DOCUMENT".document_metadata m
LEFT OUTER JOIN "DOCUMENT".document_attributes a
ON a.document_id = m.id
Run Code Online (Sandbox Code Playgroud)
错误
error: relation "DOCUMENT.document_metadata" does not exist
at Connection.parseE (/usr/src/app/node_modules/pg/lib/connection.js:602:11)
at Connection.parseMessage (/usr/src/app/node_modules/pg/lib/connection.js:399:19)
at Socket.<anonymous> (/usr/src/app/node_modules/pg/lib/connection.js:121:22)
at Socket.emit (events.js:189:13)
at addChunk (_stream_readable.js:284:12)
at readableAddChunk (_stream_readable.js:265:11)
at Socket.Readable.push (_stream_readable.js:220:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Run Code Online (Sandbox Code Playgroud)
我也试过这个
const query = `SELECT …Run Code Online (Sandbox Code Playgroud) 我只是想编写简单的注册/登录系统。我正在尝试查找用户名是否存在。步骤如下:
到目前为止一切正常。
当我返回注册页面时,我再次填写所有字段并单击注册按钮。然后它把它扔到命令行中:
Error: Client has already been connected. You cannot reuse a client.
at Client._connect (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\pg\lib\client.js:91:17)
at C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\pg\lib\client.js:310:10
at new Promise (<anonymous>)
at Client.connect (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\pg\lib\client.js:309:10)
at Object.module.exports.findUserById (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\database\register_sql.js:8:22)
at C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\routes\users.js:37:29
at Layer.handle [as handle_request] (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\express\lib\router\route.js:137:13)
at next (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\express\lib\router\route.js:131:14)
at Route.dispatch (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\express\lib\router\route.js:112:3)
Run Code Online (Sandbox Code Playgroud)
我不明白,因为在调用我的方法后我已经结束了我的客户端。
register_sql.js:
module.exports.findUserById =(async (username) =>{
try {
await client.connect();
console.log('Connected successfuly');
const result = await client.query("select * from users where username = ($1)", [username]);
console.log(result.rows[0]['username']);
await …Run Code Online (Sandbox Code Playgroud) node-postgres ×10
node.js ×10
postgresql ×6
javascript ×3
express ×2
asynchronous ×1
callback ×1