我想传递以列名作为key 的字典,从而避免在查询本身中声明列名(直接键入它们)。
假设我有一个User包含 2 个列名的表:
idUser(INT)fullName(VARCHAR)要使用node-postgres创建记录,我需要在查询中声明列名称,如下所示:
var idUser = 2;
var fullName = "John Doe";
var query = 'INSERT INTO User(idUser, age) VALUES ($1, $2)';
database.query(query, [idUser, fullName], function(error, result) {
callback(error, result.rows);
database.end();
});
Run Code Online (Sandbox Code Playgroud)
我更希望有一种方法可以只传递字典并让它从键中推断出列名 - 如果有一个简单的技巧我想听听。
例如这样的事情:
var values = {
idUser : 2,
fullName: "John Doe"
};
var query = 'INSERT INTO User VALUES ($1)';
database.query(query, [values], function(error, result) {
callback(error, result.rows);
database.end();
});
Run Code Online (Sandbox Code Playgroud) 假设您需要编写一个带有一个attribute-parameter - 控制器事件函数名称的指令.该指令执行一些处理,然后在该事件处理程序上触发通知,并向其传递一些处理参数.
在指令中设置此类属性的建议方法是什么,以避免不必要的开销,如双向绑定?
到目前为止,我只能通过使用双向绑定来实现这一点,如下例所示:
app.controller("testCtrl", function ($scope) {
$scope.onClickEvent = function (ctrlDown) {
alert(ctrlDown);
}
});
app.directive("customInput", function () {
return {
restrict: "E",
scope: {
onClickNotify: "=onClick",
},
template: "<input type='text' ng-click='onClick()' />",
replace: true,
transclude: false,
link: function (scope, element, attrs, controller) {
scope.onClick = function () {
if (typeof (scope.onClickNotify) == 'function') {
scope.onClickNotify(window.event.ctrlKey);
}
}
}
}
});
<custom-input on-click="onClickEvent" />
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,该指令使用"=" - 属性的双向绑定,这是我能够使它工作的唯一方法.我无法理解的是为什么我们不能使用"&"?根据AngularJS文档,我们应该能够在传递带名称的参数时,例如:
scope.onClickNotify({ctrlDown: window.event.ctrlKey});
Run Code Online (Sandbox Code Playgroud)
但它只是不起作用.如果我尝试在事件名称中指定参数,如下所示:
<custom-input on-click="onClickEvent(ctrlDown)" />
Run Code Online (Sandbox Code Playgroud)
然后它仍然无法正常工作.相反,我在指令中传递的值将被忽略.
我对背景中真正发生的事情感到困惑,为什么不按预期使用"&"?在这种情况下,双向绑定看起来像是一个开销,因为我们只是在一个方向传递函数名称,如果不是作为一个简单属性(使用"@").
如果我在这里做错了什么,那么正确的方法是什么?
您好,我是 Postgresql 的新手,我想了解在抛出错误时如何处理 0 结果。本质上,我想获取一个不存在的用户,如果不存在则返回 null,并有一个错误处理程序。以下是我正在使用的当前代码。任何关于更好的方法的提示都表示赞赏!
var options = {
// Initialization Options
promiseLib: promise
};
var pgp = require('pg-promise')(options);
var connectionString = 'postgres://localhost:5432/myDbName';
var db = pgp(connectionString);
function getUser(id) {
let user = new Promise(function(resolve, reject) {
try {
db.one('select * from users where loginName = $1', id).then(function(data) {
console.log(data);
resolve(data);
}).catch (function (e) {
console.log('error: '+e);
reject(e);
});
}
catch (e) {
console.log('error: '+e);
reject(e);
}
});
return user;
}
Run Code Online (Sandbox Code Playgroud)
控制台输出:
error: QueryResultError {
code: queryResultErrorCode.noData
message: "No …Run Code Online (Sandbox Code Playgroud) 我在创建客户端时专门搜索pg-promise的文档。但是我找不到设置要在连接中使用的默认架构的选项,它总是使用public架构。我该如何设置?
当我以 64Kb 的片段读取一个 16MB 的文件并Buffer.concat在每个片段上执行时,后者被证明非常慢,需要整整 4 秒才能完成。
有没有更好的方法来连接 Node.js 中的缓冲区?
使用的 Node.js 版本:7.10.0,在 Windows 10 下(均为 64 位)。
这个问题是在研究以下问题时提出的:https : //github.com/brianc/node-postgres/issues/1286,它影响了大量受众。
PostgreSQL 驱动程序bytea以 64Kb 的块读取大列,然后将它们连接起来。我们发现调用Buffer.concat是此类示例中性能巨大损失的罪魁祸首。
我想修复pg.connect is not a functionnode.js.
我安装postgreSQL.
我的来源
TypeError: pg.connect is not a function
at Socket.<anonymous> (/home/iosys/bin/cctv-sigserver-8241.js:329:20)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at Socket.emit (/home/iosys/bin/node_modules/socket.io/lib/socket.js:129:10)
at Socket.onclose (/home/iosys/bin/node_modules/socket.io/lib/socket.js:418:8)
at Client.onclose (/home/iosys/bin/node_modules/socket.io/lib/client.js:230:12)
at Client.onerror (/home/iosys/bin/node_modules/socket.io/lib/client.js:211:8)
at Client.ondata (/home/iosys/bin/node_modules/socket.io/lib/client.js:177:10)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
var pg = require('pg');
var pgConString = "postgres://icm:test@192.168.3.20/icm";
var client = new pg.Client(pgConString);
// PG update
pg.connect(pgConString, (err, client, done) => {
// Handle connection errors
if(err) {
done();
console.log(err);
//return res.status(500).json({success: false, data: err}); …Run Code Online (Sandbox Code Playgroud) 由 node.js 开发。我正在使用pg-promise。
插入以下数据有问题。
我想在下表中插入多行数据。
create table info (
id varchar(20) not null,
name varchar(20) not null,
createdate timestamp with time zone not null
)
Run Code Online (Sandbox Code Playgroud)
我在下面插入了数据。
let info = [
{ myid: '0001', myname: 'name1' },
{ myid: '0002', myname: 'name2' },
{ myid: '0003', myname: 'name3' },
]
Run Code Online (Sandbox Code Playgroud)
我最初插入了以下内容。
for (let i = 0; i <info.length; i ++) {
db.none (`INSERT INTO info (id, name, createdate ') VALUES ($1, $2, CURRENT_TIMESTAMP)`, [info[i].id, info[i].name])
}
Run Code Online (Sandbox Code Playgroud)
我想使用 pg-promise 正确修复它。 …
给定一个包含 type 列的表jsonb[],如何将 json 数组插入到该列中?
使用提供的格式化程序在这种情况下:array不起作用:json- 除非我缺少正确的组合或其他东西。
const links = [
{
title: 'IMDB',
url: 'https://www.imdb.com/title/tt0076759'
},
{
title: 'Rotten Tomatoes',
url: 'https://www.rottentomatoes.com/m/star_wars'
}
];
const result = await db.none(`INSERT INTO tests (links) VALUES ($1:json)`, [links]);
Run Code Online (Sandbox Code Playgroud) 在控制台中运行 Node.js 应用程序时,是否有办法从应用程序本身以编程方式将控制台窗口置于前端?
我主要感兴趣的是在 Windows 中使用最新的 Node.js (v13 atm)
如果有一个包可以做到这一点,那就足够了。
设想
运行多个 Node.js 控制台。当其中一个发生重要事情时,将窗户移到前面。我还没有找到任何库或示例。
我需要实现一种方法来跟踪浏览器(Angular 应用程序)中的空闲状态/不活动状态,因此我尝试创建一个可观察对象,只要没有任何用户交互事件就会触发该可观察对象,以便客户端可以自动注销:
import {filter, from, fromEvent, mergeAll, Observable, of, repeat, timeout} from 'rxjs';
const timeoutDelay = 1000 * 60 * 5; // 5 minutes
const events = ['keypress', 'click', 'wheel', 'mousemove', 'ontouchstart'];
const $onInactive = from(events.map(e => fromEvent(document, e)))
.pipe(
mergeAll(),
timeout({each: timeoutDelay, with: () => of(undefined as any)}),
filter(a => !a),
repeat()
);
Run Code Online (Sandbox Code Playgroud)
虽然我能够使其与上面的代码一起工作,但我不确定对于这个特定任务来说,这是否正确或有效地完成,所以我只想在这里仔细检查。
客户端将使用上面的代码,如下所示:
$onInvactive.subscribe(() => {
// no user activity for 5 minutes
// if currently logged in, then log out
});
Run Code Online (Sandbox Code Playgroud)
在 Web 客户端的整个生命周期中,只要发生不活动,通知就会到达。
解决方案
根据已接受的答案,下面是一个完整的 …
node.js ×6
postgresql ×5
pg-promise ×4
javascript ×3
angular ×1
angularjs ×1
buffer ×1
directive ×1
events ×1
handler ×1
performance ×1
pg ×1
rxjs ×1