小编Man*_*ngh的帖子

Sails.js从另一个调用一个控制器动作并在req.body中传递其他参数

我需要从另一个动作调用一个控制器动作.到目前为止,我没有被要求通过任何额外的参数和电话

sails.controllers.modelName.actionName(req,res)

做的工作.但是,这次我需要为req.body添加新的参数,以便调用控制器动作.在帆中有没有办法做到这一点?

我确实试过这里指定的技巧,但问题是当我调用其他控制器动作时,我在动作中所做的更改会丢失

编辑:如果我尝试在其他控制器操作中使用req.body访问参数,但是如果我尝试使用req.params.all()访问它,则无效

model-view-controller sails.js waterline

5
推荐指数
1
解决办法
2704
查看次数

将猫鼬流转换为数组

我曾与mongodb合作,但对mongoose ORM还是很​​陌生。我试图从集合中获取数据,explain()输出显示50ms。通过猫鼬获取数据的总时间为9秒。这是查询:

Node.find({'dataset': datasetRef}, function (err, nodes){
   // handle error and data here
});
Run Code Online (Sandbox Code Playgroud)

然后,我在要查询的字段上应用了索引。现在explain()输出显示为4ms。但是通过猫鼬检索数据的总时间没有改变。然后我搜索了一下,发现使用lean()可以帮助使mongoose中的读取查询性能与本地mongodb非常接近

所以我将查询更改为:

Node.find({'dataset': datasetRef})
.lean()
.stream({transform: JSON.stringify})
.pipe(res)
Run Code Online (Sandbox Code Playgroud)

这样就完全解决了性能问题。但是最终结果是像这样的JSON文档流:

{var11: val11, var12: val12}{var21: val21, var22: val22} ...
Run Code Online (Sandbox Code Playgroud)

我如何解析它形成文档数组?还是我根本不应该使用流?我认为,如果我打算在后端形成数组,则没有必要使用流,因为那样我将不得不等待所有文档都读入内存。但我也认为,在前端解析和创建整个数组可能会很昂贵。

在这种情况下,如何在不堵塞网络的情况下获得最佳性能?

更新

我正在尝试使用直通流解决此问题。但是,我还不能在JSON对象之间插入逗号。请参见下面的代码:

res.write("[");

var through = require('through');
var tr = through(
  function write(data){
    this.queue(data.replace(/\}\{/g,"},{"));
  }
);

var dbStream = db.node.find({'dataset': dataSetRef})
.lean()
.stream({'transform': JSON.stringify});

dbStream.on("end", function(){
    res.write("]");
});

dbStream
.pipe(tr)
.pipe(res);
Run Code Online (Sandbox Code Playgroud)

这样,我就可以在开头获得“ [”,在结尾获得“]”。但是,仍然无法将样式“} {”替换为“},{”。不知道我在做什么错

更新2

现在找出为什么替换无法正常工作。看来,由于我已将transform函数指定为JSON.stringify,因此它一次只能读取一个JSON对象,因此永远不会遇到该模式,}{因为它一次不会选择多个JSON元素。

现在,我修改了代码,并编写了一个自定义转换函数,该函数执行JSON.stringify,然后在末尾添加逗号。我在这里面临的唯一问题是我不知道它何时是流中的最后一个JSON对象。因为我不想在这种情况下附加逗号。目前,遇到结尾时,我会添加一个空的JSON对象。但是,这看起来并不令人信服。这是代码:

res.write("[");
function transform(data){
    return JSON.stringify(data) + ",";
} …
Run Code Online (Sandbox Code Playgroud)

stream mongoose mongodb node.js

5
推荐指数
2
解决办法
2968
查看次数

Elasticsearch:通过将元素插入其数组字段来更新现有文档

请考虑以下文档

{
  "title":  "My first blog entry",
  "text":   "Starting to get the hang of this...",
  "tags": [ "testing" ], 
  "views":  0 
}
Run Code Online (Sandbox Code Playgroud)

我需要运行一种upsert操作.如果我遇到像这样的数据

{
    "id": 1,
    "tags": [ "new tag" ]
}
Run Code Online (Sandbox Code Playgroud)

我想更新具有相同ID的现有文档.所以结果应该是:

{
    "id": 1,
    "title":  "My first blog entry",
    "text":   "Starting to get the hang of this...",
    "tags": [ "testing", "new tag" ], 
    "views":  0 
}
Run Code Online (Sandbox Code Playgroud)

如果不存在具有相同id的文档,我想创建一个新文档.

现在在像mongoDB这样的数据库中,我可以使用$ addToSet或$ push操作进行更新.我在Elasticsearch中找不到类似的操作.

我读到它可以通过在groovy中编写脚本来完成.但是,这需要在包含2亿条记录的文件上完成.我不确定我是否可以将groovy与批量API结合使用.可能吗 ?

groovy elasticsearch

5
推荐指数
1
解决办法
1904
查看次数

Node.js:从 MySQL 获取百万行并处理流

我有一个包含超过 1 亿行的 MySQL 表。该表是一个生产表,大量读取请求均由该表提供服务。我需要从此表中获取一百万行,在 Node.js 脚本中处理这些行,然后将数据存储到 Elasticsearch。

我已经用 MongoDB 做过很多次了,没有遇到任何问题。我启动一个读取流,并在每读取 1000 行后继续暂停该流,一旦这组 1000 行的下游过程完成,我将恢复该流并继续执行操作,直到处理完所有行。我没有遇到任何 MongoDB 性能挑战,因为find查询返回一个批量获取结果的游标。因此,无论我的输入有多大,都不会造成任何问题。

现在,我不知道MySQL 中的流查询在幕后是如何工作的。我的方法适用于 MySQL 还是我必须一次又一次地执行查询,例如第一个选择查询获取这些行where id < 1000,下一个查询获取结果where id between 1000 and 2000等等。以前有人研究过类似的问题。我在 Stackoverflow 上发现了类似的问题,但没有答案。

mysql node.js

5
推荐指数
1
解决办法
3483
查看次数

使用nodetool备份cassandra密钥空间

我在Ubuntu 14.04上使用Cassandra.从文档中,我可以看到运行命令:

nodetool snapshot <keyspace name> 
Run Code Online (Sandbox Code Playgroud)

创建我的键空间的快照.

该命令的输出是:

nodetool snapshot my_keyspace                       
Requested creating snapshot(s) for [my_keyspace] with snapshot name [1455455429118]
Snapshot directory: 1455455429118
Run Code Online (Sandbox Code Playgroud)

根据文档,快照应该出现在目录中:

/var/lib/cassandra/data/my_keyspace/<table names>/snapshots/1455455429118
Run Code Online (Sandbox Code Playgroud)

但是,表名末尾有一些哈希值.

我不确定它来自何处,也不确定该值是否始终相同.例如,表名是user_agents,快照目录是:

/var/lib/cassandra/data/my_keyspace/user_agents-147c8cc0d31c11e5aacb3b02dd594b59/snapshots/1455455429118
Run Code Online (Sandbox Code Playgroud)

我不确定147c8cc0d31c11e5aacb3b02dd594b59代表什么.

我试图自动化这个过程,如果我不知道这个随机哈希值,就不可能知道要选择哪个目录.有没有办法从nodetool命令的输出中禁用它或解密它?

cassandra

5
推荐指数
1
解决办法
8615
查看次数

Bluebird.js:如何添加等待Promise.map的每次迭代?

我正在使用Promise.map处理数组。对于每个元素,我正在执行一个异步操作,该操作返回一个Promise。但是,我想在每次调用之间引入一些延迟,因为下游对请求数量有限制。这是我想做的

return Promise.map(array, function (elem){
    // perform an async call using elem
    // wait for 500 ms
})
Run Code Online (Sandbox Code Playgroud)

我怎样才能达到同样的目的?

node.js bluebird

5
推荐指数
1
解决办法
3833
查看次数

Golang:如何从循环外停止执行 for 循环?

我正在使用带有标签的无限循环。在 for 循环的范围之外,我有一个作为 go 例程运行的预定函数。当满足某个条件时,我想从预定函数中中断 for 循环。我怎样才能做到这一点?这就是我正在尝试的,由于范围问题,这显然不起作用。

package main

import (
  "fmt"
  "time"
  "sync"
)

func main() {
  count := 0
  var wg sync.WaitGroup
  wg.Add(1)
  t := time.NewTicker(time.Second*1)

  go func (){
    for {
        fmt.Println("I will print every second", count)
        count++ 
        if count > 5 {
          break myLoop;
          wg.Done()
        }
        <-t.C
    }  
  }()

  i := 1

  myLoop:
  for {
    fmt.Println("iteration", i)
    i++
  }

  wg.Wait()
  fmt.Println("I will execute at the end")

}
Run Code Online (Sandbox Code Playgroud)

go

5
推荐指数
1
解决办法
1万
查看次数

如何捕获后台通过“docker-compose exec -d”运行的命令的日志?

考虑docker-compose.yml这样一个文件:

version: '3'

services:
  test:
    image: ubuntu:18.04
    tty: true

Run Code Online (Sandbox Code Playgroud)

我可以通过运行在后台启动服务docker-compose up -d

现在我可以使用以下命令在此容器上运行命令docker-compose exec

例如:

docker-compose exec test ls -lrt | head -3
Run Code Online (Sandbox Code Playgroud)

当我运行上面的命令时,我在终端上得到输出

total 64
drwxr-xr-x   8 root root 4096 May 23  2017 lib
drwxr-xr-x   2 root root 4096 Apr 24  2018 home
Run Code Online (Sandbox Code Playgroud)

现在我想要的是能够在后台运行上面的命令,我可以用它来做

docker-compose exec -d test ls -lrt | head -3
Run Code Online (Sandbox Code Playgroud)

该命令将在后台运行,这很好。但是我如何访问上述命令的输出呢?

docker docker-compose

5
推荐指数
1
解决办法
1046
查看次数

RIPE:如何使用 REST API 查找 IP 地址

根据 RIPE REST API 文档,需要按以下格式指定请求:

http://rest.db.ripe.net/ {source}/{objecttype}/{key}

所以我假设查找 IP 地址将如下所示:

http://rest.db.ripe.net/ripe/inetnum/193.0.6.142.json

然而,我得到的回应是:

{
  "link": {
    "type": "locator",
    "href": "http://rest.db.ripe.net/ripe/inetnum/193.0.6.142"
  },
  "errormessages": {
    "errormessage": [
      {
        "severity": "Error",
        "text": "ERROR:101: no entries found\n\nNo entries found in source %s.\n",
        "args": [
          {
            "value": "RIPE"
          }
        ]
      }
    ]
  },
  "terms-and-conditions": {
    "type": "locator",
    "href": "http://www.ripe.net/db/support/db-terms-conditions.pdf"
  }
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么 ?

whois

4
推荐指数
1
解决办法
7220
查看次数

Elasticsearch:如何使对象类型的所有属性都不被分析?

我需要使用Object字段创建一个Elasticsearch映射,该字段的密钥事先是未知的.此外,值可以是整数或字符串.但我希望将值存储为非分析字段(如果它们是字符串).我尝试了以下映射:

PUT /my_index/_mapping/test
{
  "properties": {
    "alert_text": {
      "type": "object",
      "index": "not_analyzed"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在索引创建得很好.但是,如果我插入这样的值:

POST /my_index/test
{
  "alert_text": {
    "1": "hello moto"
  }
}
Run Code Online (Sandbox Code Playgroud)

使用标准分析仪将值"hello moto"存储为分析字段.我希望它存储为非分析字段.如果我事先不知道所有钥匙都可以出现,是否可能?

elasticsearch

4
推荐指数
1
解决办法
2563
查看次数