我正在尝试在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周围的括号,但没有成功.
我有三个组件,每个组件都有自己的解析器,可以从不同的API中获取数据.为此,这些组件依赖于使用服务在它们之间共享的URL.
我希望当对该URL发生更改时,每个组件都会重新加载,即重新启动解析器.
我看了几个相关的SO问题,但没有提到在使用解析器时如何这样做,cf:问题1,问题2,问题3
我可以想到两种方式:
脏方法:使用路由器重定向和空白组件强制刷新组件.
this.router.navigateByUrl('blank',true);
this.router.navigateByUrl('home/(mapps:mobil//sw:simil//sf:sales)');
Run Code Online (Sandbox Code Playgroud)
但那没用.有一个刷新,但解析器没有......解决.
另一种方法:使用BehaviorSubject或ChangeDetectorRef.但是,我对如何实现它一无所知,考虑到检测到组件内的变化无法帮助我实际重启解析器.
我的感觉是,这必须通过路由器以某种方式完成,因为它是了解解析器的人:
const routes: Routes = [
{
path: '',
redirectTo: 'home',
pathMatch: 'full'
},
{
path: 'home',
component: HomeComponent,
children : [
{
path: '',
component: BlankComponent
},
{
path: 'simil',
component: SwComponent,
outlet: 'sw',
resolve: {
data: SwResolve
}
},
{
path: 'sales',
component: SalesComponent,
outlet: 'sf',
resolve: {
data: SalesResolve
}
}
]
},
{
path: 'blank',
component: BlankComponent
}
];
Run Code Online (Sandbox Code Playgroud)
有关如何实现这一目标的任何提示?
编辑:这是相关的plunkr …
我正在尝试在应用程序启动时加载辅助路由.虽然提到Victor Savkin的ng2路由器文章,这个SO问题以及关于命名路由器插座的这篇博文,但我没有设法让它正常工作.我还看到在github上提出了一个可能相关的问题,现在似乎已经解决了.
由于我的代码与命名的路由器出口文章非常相似,我将重用该代码.
路由配置如下:
const routes: Routes = [
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'home', component: HomeComponent },
{ path: 'speakers', component: SpeakersComponent, children: [
{ path: 'speakersList', component: SpeakersListComponent, outlet: 'list' },
{ path: ':id', component: BioComponent, outlet: 'bio' }
] },
];
Run Code Online (Sandbox Code Playgroud)
app.component.html包含
<div class="app-content">
<router-outlet></router-outlet>
</div>
Run Code Online (Sandbox Code Playgroud)
还有speakers.component.html
<router-outlet name="list"></router-outlet>
<router-outlet name="bio"></router-outlet>
Run Code Online (Sandbox Code Playgroud)
home.component.ts是一个基本组件,它允许用户通过单击按钮导航到扬声器组件:
<button md-raised-button class="md-primary"
[routerLink]="['/speakers', {outlets: {list: ['speakersList'], …Run Code Online (Sandbox Code Playgroud) 我正在尝试遵循 pg-promise 库作者在这里推荐的性能模式。
基本上,Vitaly 建议使用插入来这样做:
var users = [['John', 23], ['Mike', 30], ['David', 18]];
// We can use Inserts as an inline function also:
db.none('INSERT INTO Users(name, age) VALUES $1', Inserts('$1, $2', users))
.then(data=> {
// OK, all records have been inserted
})
.catch(error=> {
// Error, no records inserted
});
Run Code Online (Sandbox Code Playgroud)
使用以下辅助函数:
function Inserts(template, data) {
if (!(this instanceof Inserts)) {
return new Inserts(template, data);
}
this._rawDBType = true;
this.formatDBType = function () {
return data.map(d=>'(' + pgp.as.format(template, …Run Code Online (Sandbox Code Playgroud) 我有一个 NodeJS 脚本,每天都会抓取 URL。请求被限制以对服务器友好。这导致我的脚本运行了相当长的时间(几个小时)。
我一直在寻找一种在 GCP 上部署它的方法。而且因为之前是在 cron 中完成的,所以我很自然地看看如何在 Google Cloud 上运行一个 cronjob。但是,根据docs,脚本必须作为 API 公开,并且对该 API 的 http 调用最多只能运行 60 分钟,这不符合我的需要。
我看了一下这个 SO question,它建议使用云函数。但是,我不确定这种方法是否适合我的情况,因为我的脚本需要比那里描述的简单服务器监控作业更多的处理。
有没有人在 GCP 上做这件事的经验?
注意:澄清一下,我想避免在 VPS 上部署它。
编辑:我联系了谷歌,这是他们的回复:
感谢您的耐心等待。目前,无法连续运行 cron 脚本 6 到 7 个小时,因为 App Engine 中 cron 的当前限制是每个 HTTP 请求 60 分钟。如果您的用例可能,您可以将 7 小时分散到重复性任务中,例如,每 10 分钟或 1 小时。cron 作业请求与推送任务队列的限制相同。免费应用程序最多可以有 20 个计划任务。您可以参考 cron 计划格式的文档。
此外,仍然可以使用 Postgres 和 Redis。但是,请注意 Postgres 仍处于测试阶段。
由于我无法分配任务,因此我不得不为此继续管理 dokku VPS。
我有一张包含很多自定义函数调用的工作表。我想永久缓存结果。到现在为止,我一直使用缓存服务,但它被限制为六个小时。有没有办法永久缓存结果?我在这里的评论中读到,可以在用户的浏览器中缓存数据。我应该如何实现这一目标?
谢谢 !
编辑:感谢 Serge Hendrickx 的建议,我能够使用与缓存服务相同的方法永久缓存结果:
var scriptProperties = PropertiesService.getScriptProperties();
if(getCachedVariable(variableName) == null){
// Results aren't in cache, get them and save them
scriptProperties.setProperty(variableName,value);
}
return getCachedVariable(variableName);
function getCachedVariable(variableName){
return scriptProperties.getProperty(variableName);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将三种类型的整数(8,16 和 32 位)转换为 Php 中的固定长度十六进制字符串。
例如,第三个 int 是 32 位无符号的。它的值设置为 300。将其转换为十六进制,得到 12c。
我希望始终从我的 int 中获取固定的六个字符的十六进制字符串,即在本例中: 00 01 2c ...或 00 00 78 如果我的 int 值为 120。(注意:我知道 32 位会克服这个范围)
有什么方法可以获取 Php 中十六进制字符串的长度吗?另一种策略是定义六角字符串的长度,但我没有找到任何与此相关的内容。
我的目标只是能够始终将 6 个字符大小的十六进制字符串发送到连接的对象。
我使用“dechex()”将我的值转换为十六进制,但我永远不知道输出的字符数,因此无法向其中添加特定数量的零(因为我的最终十六进制字符串长度为 6 个字符) )。
我读过一些关于设置 PHP_INT_MAX 的内容,但我也读到它会影响所有整数,这是我不想要的。
非常感谢您的帮助。
我期待着为绿色或红色的一些异步接收数据着色,具体取决于它的值.
为了处理竞争条件,我使用了一个Subject,它广播一个包含我感兴趣的数据的Object.
我成功地做了我想做的事,但结果代码非常难看:
<span [ngClass]="{greenClass: isPositive((mySubject | async)?.fieldData), redClass: !isPositive((mySubject | async)?.fieldData)}">
{{(mySubject | async)?.fieldData | number:'1.0-1' }}
</span>
有没有更好的方法来解决这个问题?我试图在ngClass中放置一个三元表达式,但它没有用.将代码移回我的控制器是不行的,因为它会立即创建十个变量.
angular ×3
javascript ×3
node.js ×2
pg-promise ×2
typescript ×2
angular-pipe ×1
caching ×1
cron ×1
performance ×1
php ×1
subject ×1