问题标签 [seneca]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1055 浏览

javascript - 请提供带有 express 的 seneca 的工作示例以公开 REST api

我用过这个:

当我尝试使用 POSTMAN url 调用 api 时,上面的示例给出以下错误:http://localhost:3000/cam/asset将 post param json 作为 {"role":"api","type":"asset" }

TypeError:无法在 Layer.handle [as handle_request] (C:\node_projects\node_modules\express\ lib\router\layer.js:95:5) 在 trim_prefix (C:\node_projects\node_modules\express\lib\router\index.js:312:13) 在 C:\node_projects\node_modules\express\lib\router\ index.js:280:7 在 Function.process_params (C:\node_projects\node_modules\express\lib\router\index.js:330:12) 在下一个 (C:\node_projects\node_modules\express\lib\router\index .js:271:10) 在 expressInit (C:\node_projects\node_modules\express\lib\middleware\init.js:33:5) 在 Layer.handle [as handle_request] (C:\node_projects\node_modules\express\lib \router\layer.js:95:5) 在 trim_prefix (C:\node_projects\node_modules\express\lib\router\index.js:312:13) 在 C:\node_projects\node_modules\express\lib\router\index.js:280:7

它还在控制台上打印以下 JSON。与未找到匹配的操作模式相关的内容。

{"err":{},"level":"warn","when":1481878030070} {"notice":"seneca: 找不到匹配的动作模式 { 使用: { 前缀: '/cam', pin: {角色:'api',类型:' '},地图:{资产:[Object],发票:[Object]}},角色:'web'},并且没有提供默认结果(使用默认$属性)。 ,"code":"act_not_found","err":{"eraro":true,"orig":null,"code":"act_not_found","seneca":true,"package":"seneca","msg ":"seneca: 找不到匹配的动作模式 { 使用: { 前缀: '/cam', pin: { role: 'api', type: ' ' }, map: {asset: [Object], invoice: [Object ] } }, 角色: 'web' },并且没有提供默认结果(使用 default$ 属性)。","details":{"args":"{ use: { prefix: '/cam', pin: { role: 'api', type: '' },地图:{ 资产:[Object],发票:[Object] } },角色:'web' }","plugin":{}},"callpoint":"at handle_inward_break (C:\node_projects\node_modules \seneca\seneca.js:1155:23)"},"actid":"gh3fzeqpdsp0/so5yjiwk3v1l","msg":{"use":{"prefix":"/cam","pin":{"role ":"api","type":" "},"map":{"asset":{"GET":true,"POST":true},"invoice":{"GET":true,"POST ":true}}},"role":"web","meta$":{"id":"gh3fzeqpdsp0/so5yjiwk3v1l","tx":"so5yjiwk3v1l"}},"meta":{},"listen ":false,"transport":{},"kind":"act","case":"ERR","duration":260,"level":"error","when":1481878030071}

0 投票
0 回答
215 浏览

node.js - 将 senecajs 与 docker 一起使用

我目前正在做一个服务器端基于nodejs(express)的项目。我们使用 docker-swarm 主要是为了负载均衡和可扩展性:实际上,我们构建了一个 docker 镜像并将其部署在 4 个节点下,其余的由 swarm 处理(负载均衡)。过去几天我一直在阅读有关微服务的概念以及 docker 可用于构建微服务的内容。我还读到 senecajs 可用于构建微服务。

是否可以将两者结合起来?我不想触及我们当前的架构,但我仍然对使用微服务感兴趣。

所以:

  • senecajs 将用于分离 express 中的功能并构建微服务
  • docker-swarm 将用于构建容器(主要用于负载平衡和方便在任何服务器上的部署)
0 投票
0 回答
355 浏览

node.js - Seneca.js 在跨独立 docker 容器的微服务架构中的作用

我正处于将 ac#.net 单体应用程序迁移到 node.js 的计划阶段。我想为这个应用程序实现事件驱动的微服务架构,使用 seneca.js 和 docker 将每个微服务分离到其自己的容器中,该容器托管在 aws elastic beanstalk 上。从我所阅读的内容和建议来看,这似乎是目前为止的方法。

这是我感到困惑的地方,在查看 seneca.js 文档时,我没有看到进程外通信是如何发生的。

特别是,如果我想允许多个客户端订阅同一个事件,我应该将 rabbitmq 与 seneca.js 一起使用,因为有时多个微服务必须为特定事件执行操作?在走这条路时,我将如何处理其中一个订阅者失败并需要再次运行的情况?似乎这个事件只需要为这个微服务而不是其他微服务再次运行。

此外,在使用 seneca.js 时,我如何允许为每个微服务公开一个 rest api,以允许客户端使用这种方法访问其内部数据库和数据?

如果我在这方面的任何方面不正确,请告诉我。

0 投票
1 回答
619 浏览

node.js - 当一个节点不可达时,RabbitMQ 集群失败

我通过 Docker 和 Docker Cloud 创建了一个 RabbitMQ 集群。我在两个单独的节点(都托管在 AWS 上)上运行两个 RabbitMQ 容器。

的输出rabbitmqctl cluster_status是:

但是,当我停止一个容器/节点时,我的消息无法发送并排队.dlx

我将 senecajs 与 NodeJS 一起使用。

有没有人有同样的问题,可以指出我的方向?

0 投票
2 回答
11299 浏览

node.js - 在微服务之间共享文件

我正在尝试将项目从其当前的整体状态转移到微服务架构。该项目在 Node.js 中,所以我开始研究Seneca.js,尤其是它的seneca-mesh模块。将图像操作(裁剪、调整大小等)移动到微服务中似乎是最明智的第一步,因为它现在大大降低了我的应用程序的速度。

当应用程序是单体时,将某些文件传递到文件操作逻辑中没有问题——只需从本地存储磁盘中读取即可。然而,对于微服务,如果我们牢记可扩展性,它就会变得更加困难。当然,我可以构建一个图像处理微服务,在同一主机上扩展它,并在它之间共享我需要的目录,这样它们也可以从本地磁盘读取。

如果我想要一个真正可扩展的微服务,它可以在具有不同 IP 地址且不共享相同文件系统的不同机器上运行和扩展?我想也许我可以利用 Node 的流 API 并通过 HTTP 或 TCP 或套接字来回发送这些文件,或者你命名它。

据我所知,Seneca.js 无法以正确的方式做到这一点。当然,我可以通过 Seneca.js 将文件从主应用程序发送到图像处理服务,如下所示:

并分块接收:

但这种方法看起来很丑陋,而且是轮回式的。

另一种方法是提供一些 HTTP 服务器并将文件作为multipart/form-dataor发送application/octet-stream,如下所示:

但这意味着重新发明微服务通信的框架。总而言之,我就分布式微服务之间的文件共享以及可能的框架寻求建议。

0 投票
1 回答
48 浏览

javascript - 当层次结构相同时,seneca 中 url 的模式匹配问题

我有 2 个网址,例如:

  1. /测试运行
  2. /test/{test_id}

我有 2 条单独的路线供他们使用,例如:

但是,当我访问 /test/run. 第二种模式通过作为 URL 参数运行来触发。

这是预期的行为还是有其他方法可以做到这一点?

0 投票
1 回答
73 浏览

mongodb - 如果在响应期间不是函数,则 TypeError seneca indexof

我编写了一个简单的操作,它使用 seneca-mongo 存储模块连接到 mongo db,执行列表查询并获取结果。我可以看到查询成功并且获取了正确的结果。当我尝试将这些结果发送回客户端时,响应调用错误并显示以下消息和堆栈跟踪。

我写的动作是

同一段代码正在运行,现在我收到此错误。不确定发生了什么变化。非常感谢任何帮助/建议。

0 投票
1 回答
759 浏览

node.js - 如何在 seneca-web 中使用路由作为 rest api?

我想用 seneca-web (express) 创建 rest API。我找不到其中使用的路由文件的任何(完整)文档。我以这些例子为基础。假设我有一个名为 Task 的资源。我想要这些http方法:

  • 获取/任务
  • 获取 /tasks/:taskId
  • 发布/任务

这是routes.js:

和我用于处理的 seneca 插件:

  • 我不确定如何在这里分开 POST 和 GET 操作。
  • 我发现路由的映射对象中的键被视为路径的一部分这一事实也存在问题,例如。GET /tasks/all 而不是 GET /tasks。

谢谢你的帮助。

0 投票
1 回答
638 浏览

javascript - seneca-web 超时配置

首先,我想说我是 senecajs 的新手。

我正在测试这个配置。

我已经配置了在端口 9007 上运行的 Senecjs 微服务,该微服务正在正确运行并处理请求。当我直接请求此服务时,我会在 cca 10 秒后收到响应(它是对 oracle db 数据的请求)。

但是当我通过 Hapi + Seneca-web 请求相同的数据时,我收到此错误:“statusCode”:504,“error”:“Gateway Time-out”

微服务返回数据前几秒。

这是我的配置:

我做错了什么或者什么超时导致了这个?

0 投票
1 回答
100 浏览

node.js - seneca和redis是什么关系

npm js中有两个插件,一个叫redis,一个叫seneca-redis-store,这两者有什么区别? https://github.com/senecajs/seneca-redis-store https://github.com/NodeRedis/node_redis#rediscreateclient