小编vit*_*y-t的帖子

省略列名/将对象直接插入到node-postgres中

我想传递以列名作为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)

postgresql node.js node-postgres

3
推荐指数
1
解决办法
3977
查看次数

AngularJS:从指令调用控制器事件

假设您需要编写一个带有一个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)

然后它仍然无法正常工作.相反,我在指令中传递的值将被忽略.

我对背景中真正发生的事情感到困惑,为什么不按预期使用"&"?在这种情况下,双向绑定看起来像是一个开销,因为我们只是在一个方向传递函数名称,如果不是作为一个简单属性(使用"@").

如果我在这里做错了什么,那么正确的方法是什么?

events directive handler angularjs

2
推荐指数
1
解决办法
8128
查看次数

Node / Express &amp; Postgresql - 当没有行匹配时

您好,我是 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)

postgresql node.js pg-promise

2
推荐指数
1
解决办法
1926
查看次数

如何在 pg-promise 中设置模式

我在创建客户端时专门搜索pg-promise的文档。但是我找不到设置要在连接中使用的默认架构的选项,它总是使用public架构。我该如何设置?

javascript postgresql node-postgres pg-promise

2
推荐指数
1
解决办法
3517
查看次数

慢缓冲.concat

当我以 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是此类示例中性能巨大损失的罪魁祸首。

performance buffer node.js

2
推荐指数
1
解决办法
2732
查看次数

如何修复pg.connect不是node.js上的一个函数?

我想修复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)

javascript postgresql node.js

2
推荐指数
1
解决办法
3942
查看次数

在 pg-promise 中使用助手时如何设置列

由 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 正确修复它。 …

javascript postgresql node.js pg pg-promise

2
推荐指数
1
解决办法
1600
查看次数

如何使用 pg-promise 将 jsonb[] 数据插入列

给定一个包含 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)

pg-promise

2
推荐指数
1
解决办法
4436
查看次数

将 Node.js 控制台窗口置于前面

在控制台中运行 Node.js 应用程序时,是否有办法从应用程序本身以编程方式将控制台窗口置于前端?

我主要感兴趣的是在 Windows 中使用最新的 Node.js (v13 atm)

如果有一个包可以做到这一点,那就足够了。

设想

运行多个 Node.js 控制台。当其中一个发生重要事情时,将窗户移到前面。我还没有找到任何库或示例。

node.js

2
推荐指数
1
解决办法
1298
查看次数

使用 RXJS 进行空闲/不活动跟踪

我需要实现一种方法来跟踪浏览器(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 客户端的整个生命周期中,只要发生不活动,通知就会到达。

解决方案

根据已接受的答案,下面是一个完整的 …

rxjs angular

2
推荐指数
1
解决办法
686
查看次数