我已多次阅读以下文档: Node API Babel 6 Docs
我开始学习pg-promise遵循Learn by Example教程,并且更愿意使用ES6并使用Babel转换到ES5,但我不确定一些事情:
文档对我来说不清楚我放了哪个文件: require("babel-core").transform("code",options); 进入该代码的哪些部分是占位符.当我使用该代码时,我只是在某处使用它然后我可以在每个其他文件中使用ES6吗?这将如何实现?
我读了这个.babelrc文件,想确认实际的文件名是否是".babelrc",或者如果那只是文件扩展名和我项目的根目录相关的地方我放了那个文件..怎么办我链接到它?
如果我正在使用pg-promise我应该使用ES6和Babel还是会运行:npm install如pg-promise 的测试部分所描述的那样足够并试图使用ES6来创建更多问题?
如果在我的服务器端开发期间需要,我希望利用let和const.
编辑 值得注意的是我还使用Babel-Node读取了Node JS,并且发现应该避免使用它.最底层的最终答案对我来说并没有多大意义,因为我在跟踪Babel提供的实际文档时遇到了麻烦.
我想用一个INSERT
查询插入多行,例如:
INSERT INTO tmp(col_a,col_b) VALUES('a1','b1'),('a2','b2')...
Run Code Online (Sandbox Code Playgroud)
有没有办法轻松地做到这一点,最好是这样的对象数组:
[{col_a:'a1',col_b:'b1'},{col_a:'a2',col_b:'b2'}]
Run Code Online (Sandbox Code Playgroud)
我可能最终在一个块中有500条记录,因此运行多个查询是不可取的.
到目前为止,我只能为一个对象做到这一点:
INSERT INTO tmp(col_a,col_b) VALUES(${col_a},${col_b})
Run Code Online (Sandbox Code Playgroud)
作为一个附带问题:使用${}
符号的插入是否可以防止SQL注入?
我正在构建一个使用pg-promise模块连接到postgres数据库的快速应用程序.
我想确保启动应用程序服务器时数据库连接成功.换句话说,如果与数据库的连接失败,我想抛出一个错误.
我的server.js文件如下:
const express = require("express");
const databaseConfig= {
"host": "localhost",
"port": 5432,
"database": "library_app",
"user": "postgres"
};
const pgp = require("pg-promise")({});
const db = pgp(databaseConfig);
const app = express();
const port = 5000;
app.listen(port, (err) => {
console.log(`running server on port: ${port}`);
});
Run Code Online (Sandbox Code Playgroud)
无论数据库连接是否有效,当前配置都将启动快速服务器,这不是我想要的行为.
我尝试浏览文档但找不到解决方案.我也试过了const db = pgp(databaseConfig).catch((err) => { // blow up });
,但那不行,因为pgp
没有回复承诺.
我有一个场景,我需要插入多个记录.我有一个像id(它是来自其他表的fk),key(char),value(char)的表结构.需要保存的输入将是上述数据的数组.示例:我有一些数组对象,如:
lst = [];
obj = {};
obj.id= 123;
obj.key = 'somekey';
obj.value = '1234';
lst.push(obj);
obj = {};
obj.id= 123;
obj.key = 'somekey1';
obj.value = '12345';
lst.push(obj);
Run Code Online (Sandbox Code Playgroud)
在MS SQL中,我会创建TVP并通过它.我不知道如何在postgres中实现.所以我现在要做的是使用pg-promise库在postgres sql的单个查询中保存列表中的所有项目.我无法从文档中找到任何文档/理解.任何帮助赞赏.谢谢.
我对包含类型列的表有这个简单的查询bigint
.
但是当我查询它时,pg-promise将此列的值作为字符串返回.我在文档中找不到相关信息.这是标准行为吗?
var ids = [180, 120];
db.any('SELECT id_brand, brand from catalog_brand WHERE id_brand in ($1:csv)', [ids])
.then((data) => {
// return results
});
Run Code Online (Sandbox Code Playgroud)
data
采用以下形式,id为string而不是int:
[{id_brand: "180", brand: "Ford"}, {id_brand: "120", brand: "Nike"}]
Run Code Online (Sandbox Code Playgroud)
有没有什么可以指示pg-promise返回实际类型?
我刚开始学习nodejs-postgres
并找到了pg-promise
包裹.我阅读了文档和示例,但我不明白我应该在哪里放置初始化代码?我使用Express,我有很多路线.
我必须将整个初始化(包括pg-monitor
init)放到我想要查询db的每个文件中,或者我只需要initalize/configure
在server.js中包含它们?
如果我只在server.js中初始化它们应该包含哪些我需要db查询的文件呢?
换一种说法.我不清楚pg-promise和pg-monitor configuration/initalization
是全局还是本地行动?
我还不清楚是否需要为每个查询创建一个db变量并结束pgp?
var db = pgp(connection);
db.query(...).then(...).catch(...).finally(**pgp.end**);
Run Code Online (Sandbox Code Playgroud) 我将使用Postgresql构建一个Nodejs应用程序作为后端.我不打算使用像Sequelize这样的ORM,因为文档和性能问题不好或任何其他ORM - ORM是一种反模式.
我发现node-postgres和pg-promise在这方面是候选者.因此,任何人都可以澄清其中一个工具比另一个工具更好的方案,或者哪个工具更适合描述,前提是node-postgres自2010年以来一直在发展,并且自2015年以来一直是pg-promise.
我需要构建一个处理大型CSV文件的函数,以便在bluebird.map()调用中使用.考虑到文件的潜在大小,我想使用流媒体.
此函数应接受流(CSV文件)和函数(处理流中的块)并在读取文件结束(已解决)或错误(拒绝)时返回承诺.
所以,我从:
'use strict';
var _ = require('lodash');
var promise = require('bluebird');
var csv = require('csv');
var stream = require('stream');
var pgp = require('pg-promise')({promiseLib: promise});
api.parsers.processCsvStream = function(passedStream, processor) {
var parser = csv.parse(passedStream, {trim: true});
passedStream.pipe(parser);
// use readable or data event?
parser.on('readable', function() {
// call processor, which may be async
// how do I throttle the amount of promises generated
});
var db = pgp(api.config.mailroom.fileMakerDbConfig);
return new Promise(function(resolve, reject) {
parser.on('end', resolve);
parser.on('error', reject);
});
} …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在pg-promise的参数数组中传递一系列参数,如pg-promise文档中所建议的那样.
db.any("SELECT fieldname FROM table WHERE fieldname = $1 AND fieldname2 IN ($2)",
[1,[[1730442],[1695256]],[487413],[454336]]])
.then(function (data) {
console.log("DATA:", data); // print data;
})
.catch();
Run Code Online (Sandbox Code Playgroud)
但是它不起作用,我在参数列表之后返回了"缺失"错误.或者"运算符不存在:整数=整数[]]"错误,如果我将参数替换为:
[1,[1730442]]
Run Code Online (Sandbox Code Playgroud)
当然如果我像这样传递它,它的工作原理:
[1,1730442]
Run Code Online (Sandbox Code Playgroud)
当涉及其他参数时,它是传递值数组的正确方法吗?
我还尝试删除$ 2周围的括号,但没有成功.
有如下数组,需要保存在JSONB列中:
[{"FoodType":"veg","pref":"High"}
,{"FoodType":"sea food","pref":"Medium"}
,{"FoodType":"Chicken","pref":"Low"}]
Run Code Online (Sandbox Code Playgroud)
我只是传递req.body对象(来自Express)以插入到DB.
db.one('insert into foodies(FoodieName, FoodPref,country,languagePref)' +
'values(${FoodieName}, $[FoodPref], ${country} ,${languagePref}) RETURNING FoodieId',req.body)
Run Code Online (Sandbox Code Playgroud)
**PG DB通过pg-promise库引发错误:
{ [error: column "foodpref" is of type jsonb but expression is of type text[]]
name: 'error',
length: 196,
severity: 'ERROR',
code: '42804',
detail: undefined,
hint: 'You will need to rewrite or cast the expression.',
position: '123',
internalPosition: undefined,
internalQuery: undefined,
where: undefined,
schema: undefined,
table: undefined,
column: undefined,
dataType: undefined,
constraint: undefined,
file: 'parse_target.c',
line: '529',
routine: 'transformAssignedExpr' }
POST /api/member …
Run Code Online (Sandbox Code Playgroud) pg-promise ×10
node.js ×7
postgresql ×6
javascript ×2
arrays ×1
babeljs ×1
bluebird ×1
express ×1
jsonb ×1
promise ×1