小编GCS*_*SDC的帖子

AWS API Gateway Web Socket Api - 向所有连接的客户端广播消息

我已经使用 API Gateway 创建了一个 Web Socket Api,并且能够将客户端连接到它。

此外,我可以通过指定它ConnectionId并使用以下代码将消息发送到连接的客户端:

const AWS = require('aws-sdk');
let apiGatewayManagementApi = new AWS.ApiGatewayManagementApi({
  apiVersion: '2018-11-29',
  endpoint: 'https://XXXXXXXXX.execute-api.sa-east-1.amazonaws.com/dev/',
  region: 'sa-east-1'
});
const params = {
  ConnectionId: 'YYYYYYYYYYYYY',
  Data: 'test'
};
apiGatewayManagementApi.postToConnection(params, function (err, data) {
  if (err) {
    console.log(err, err.stack); // an error occurred
  } else {
    console.log(data);           // successful response
  }
});
Run Code Online (Sandbox Code Playgroud)

问题是我不需要区分客户端,所以我不想跟踪每个客户端的 ConnectionId,但是如果我在发送消息时删除它,我会收到以下错误: Missing required key 'ConnectionId' in params

有没有办法向所有连接的客户端发送消息(不指定任何 ConnectionId)?

javascript websocket aws-sdk aws-lambda aws-api-gateway

8
推荐指数
1
解决办法
3567
查看次数

具有延迟加载问题的角度嵌套路由

我有一个应用程序,在该应用程序上我只需要在启动时提供登录功能,并且在用户进行身份验证后应该延迟加载所有剩余的代码。

我创建了一个core.module核心routing.modulecore.component来处理这个问题,但其子组件(例如DashboardComponent)正在呈现路由器出口元件内部的app.component.html,而不是在core.component.html 等标题没有被显示。

我已经搜索了很多,但找不到如何让这个工作。

app-routing.module.ts

const routes: Routes = [
  { path: '', redirectTo: 'signin', pathMatch: 'full' },
  { path: 'signin', component: SigninComponent },
  { path: 'app', loadChildren: './core/core.module#CoreModule', canLoad: [AuthGuard] },
  { path: '**', redirectTo: 'signin' }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule {}
Run Code Online (Sandbox Code Playgroud)

应用程序组件.html

<router-outlet></router-outlet>
Run Code Online (Sandbox Code Playgroud)

core-routing.module.ts

const routes: Routes = [
  { path: '', redirectTo: 'dashboard', pathMatch: 'full' },
  { path: 'dashboard', loadChildren: './dashboard/dashboard.module#DashboardModule', canLoad: [AuthGuard] },
  { …
Run Code Online (Sandbox Code Playgroud)

angular angular-router

7
推荐指数
1
解决办法
6479
查看次数

在多个集合上执行事务时,MongoDB Atlas错误(代码8000)

我试图从蒙戈DB节点JS司机蒙戈DB阿特拉斯M0实例进行交易(如描述在这里),我收到以下错误:

code:8000
codeName:"AtlasError"
errmsg:"internal atlas error checking things: Failure getting dbStats: read tcp 192.168.254.78:50064->192.168.254.78:27000: i/o timeout"
message:"internal atlas error checking things: Failure getting dbStats: read tcp 192.168.254.78:50064->192.168.254.78:27000: i/o timeout"
name:"MongoError"
Run Code Online (Sandbox Code Playgroud)

我已经搜索了一段时间,但找不到有关如何解决此问题的任何线索。

附加信息:

  • 将第二个操作添加到事务后,将引发该错误。

  • 如果我删除所有其他操作,而只留下一个(
    无关紧要),则工作正常。

  • 如果我更改操作顺序(更改为任何顺序),则错误
    仍在添加第二个操作上。

  • 如果所有操作都在同一个数据库和集合上执行,则工作正常

我的代码:

async function connect () {

if (dbClient !== null && dbClient.isConnected()) {
    console.log('Reusing db connection => ' + JSON.stringify(dbClient));
  } else {
      console.log('Connecting to database');
      dbClient = await MongoClient.connect(url, { useNewUrlParser: true });
      console.log('Successfully connected to database');
  }
} …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-atlas

6
推荐指数
1
解决办法
875
查看次数

垫选择显示的值不同于垫选择的值

我有一个mat-select下拉列表,在这里我遍历了frequencyArr对象。

在ts

frequencyArr = [
{key : "Once daily", abbriviation : '0-0-1'},
{key : "Twice daily", abbriviation : '1-0-1'},
{key : "Thrice daily", abbriviation : '1-1-1'},
{key : "Four times a day", abbriviation : '1-1-1-1'}
  ]
Run Code Online (Sandbox Code Playgroud)

在html中

<mat-select placeholder="frequency" formControlName="frequency" required>                             
    <mat-option *ngFor="let frequency of frequencyArr" [value]="frequency.abbriviation">
        <span>{{frequency.key }} : {{ frequency.abbriviation}}</span>
    </mat-option>
</mat-select>
Run Code Online (Sandbox Code Playgroud)

我想做的是打开对话框时将显示对象键:object value-

<span>{{frequency.key }} : {{ frequency.abbriviation}}</span>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

很好,但是当我选择该选项时,它应该仅将frequency.key显示到所选字段中,而不会发生。

在此处输入图片说明

我尝试使用Google谷歌搜索,但在这种情况下没有找到任何东西。任何帮助表示赞赏。

angular-material angular6

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

AWS API 网关 + Cognito + Lambda - $context.authorizer.principalId 为空

我有一个典型的 AWS 设置,使用 API Gateway 和 Cognito 用户池身份验证并与 Lambda 函数集成。

一切正常,但现在我需要能够在 Lambda 中获取经过身份验证的用户 ID。

我在 SO 上看到了很多关于这个的问题/答案,但没有一个有助于完成这项工作。最接近的是这个答案,它链接到这个文档

从上面的这些链接中,我了解到我应该访问映射模板上的“$context.authorizer.claims”的某些属性以获取用户 ID,但是我找不到可用属性的列表或应该使用哪个属性。

我也尝试使用 "$context.authorizer.principalId" 但这只会返回一个空字符串。

我目前正在使用 API 网关“方法请求传递”映射模板,但到目前为止已经尝试了许多不同的映射模板。

我在这里错过了什么或做错了什么?

如果需要任何进一步的信息,请告诉我。

amazon-web-services amazon-cognito aws-lambda aws-api-gateway

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

Angular - 将管道作为变量传递

如何存储和使用来自变量的管道信息?

我已经搜索了很多,但找不到解决方案。

我想要实现的是将任何有效的管道信息作为变量(十进制、百分比、日期、自定义等)传递。遵循一个简单的例子:

parent.component.ts:

columnsDef = {
  value: 0.35,
  pipeInfo: 'percent:"0.2-2":"pt-BR"'
};
Run Code Online (Sandbox Code Playgroud)

parent.component html:

<app-display-component [columnsDef]="columnsDef"></app-display-component>
Run Code Online (Sandbox Code Playgroud)

app-display.component html:

<h1> {{ columnsDef.value | columnsDef.pipeInfo }}</h1>
Run Code Online (Sandbox Code Playgroud)

预期的输出是格式化为百分比的值,但我得到的只是模板解析错误:

错误错误:未捕获(承诺):错误:模板解析错误:解析器错误:意外标记“。”

angular-pipe angular

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

Angular 9 - 找不到 &lt;component&gt; 的组件工厂

将 Angular 应用程序从版本 8 更新到 9 后,出现以下错误: No component factory found for <component>. Did you add it to @NgModule.entryComponents?

但正如Angular Update Guide 所述entryComponents不再需要添加组件:

Angular 9 Ivy 现在是默认渲染引擎

...

如果你在你的 NgModules 中指定了任何 entryComponents 或者使用了 ANALYZE_FOR_ENTRY_COMPONENTS,你可以删除它们。Ivy 编译器和运行时不再需要它们。

我正在使用以下软件包版本:

"dependencies": {
  "@angular/animations": "~9.0.3",
  "@angular/cdk": "~9.1.0",
  "@angular/common": "~9.0.3",
  "@angular/compiler": "~9.0.3",
  "@angular/core": "~9.0.3",
  "@angular/forms": "~9.0.3",
  "@angular/material": "^9.1.0",
  "@angular/platform-browser": "~9.0.3",
  "@angular/platform-browser-dynamic": "~9.0.3",
  "@angular/router": "~9.0.3",
},
"devDependencies": {
  "@angular-devkit/build-angular": "~0.900.3",
  "@angular-devkit/build-ng-packagr": "~0.900.3",
  "@angular/cli": "~9.0.3",
  "@angular/compiler-cli": "~9.0.3",
  "@angular/language-service": "~9.0.3",
}
Run Code Online (Sandbox Code Playgroud)

这是我用来动态创建组件的代码:

@ViewChild('target', {static: true, …
Run Code Online (Sandbox Code Playgroud)

angular angular9

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

AWS Lambda时区

我已经搜索了一段时间,但找不到关于该内容或AWS的任何官方文档的明确答案。

我有一个Lambda函数,需要根据我的时区获取当前日期,但是我不确定我可以依靠哪个前提来做到这一点,并且由于这是一个关键应用程序,因此我不能简单地依靠单一测试或经验结果。

我希望lambda函数遵循托管于其上的AWS地区的时区,或者遵循任何GMT 0的唯一时区,但是无法在任何地方进行确认。

任何人都可以澄清一下它是如何工作的,如果可能的话,还请指向任何与此有关的官方文档?另外,还有与夏时制有关的特殊问题吗?

我的Lambda函数是在NodeJS上编写的,而我正在本地(在我的机器上)执行的用于检索当前日期时间的操作正在使用new Date()

amazon-web-services node.js aws-lambda

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

将 cognitoUser.authenticateUser 回调转换为 observable

我正在使用 AWS Cognito Javascript SDK 构建一个 angular 应用程序进行身份验证。

我有一个服务,我有一个login方法:

login(username: string, password: string): void {
  const authData = {
    Username: username,
    Password: password
  };
  const authDetails = new AuthenticationDetails(authData);
  const userData = {
    Username: username,
    Pool: userPool
  };
  this.cognitoUser = new CognitoUser(userData);
  const self = this;
  this.cognitoUser.authenticateUser(authDetails, {
    onSuccess: self.onSuccess.bind(self),
    onFailure: self.onFailure.bind(self),
    newPasswordRequired: function(userAttributes, requiredAttributes) {
      self.newPasswordRequired.next(true);
      self.authIsLoading.next(false);
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

现在,我不想直接在服务上使用回调,而是想从 login方法,我可以订阅该方法并获取身份验证的结果:成功、失败或需要新​​密码。

我查看了 Observable bindCallbackbindNodeCallback方法以及另一个问题,但不知道如何做到这一点。

如何做到这一点?

javascript rxjs amazon-cognito angular

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

在javascript上循环显示2个数字范围

我正在开发一个解决方案,我需要循环通过两个独立的连续数字范围.让我们说例如1到5和10到15.

我正在使用以下代码:

var X = [];

for (i = 1; i < 6; i++) {
  X.push(i);
}
for (i = 10; i < 16; i++) {
  X.push(i);
}

for (var x in X) {      
  console.log(parseInt(X[x]));
}
Run Code Online (Sandbox Code Playgroud)

这段代码完成了这项工作,但是有很多开销和不必要的操作:

  • 花费时间填充所需范围的阵列
  • 通过索引访问元素以获取真值(X [x])
  • 使用parseInt将值转换回整数(因为类型X [x]是字符串)

是否有更简单/更有效的方法来执行此类操作? 像这样的东西:

for(x = 1 to 5, then x = 10 to 15) {
  // do something with x
}
Run Code Online (Sandbox Code Playgroud)

约束:

  • 使用内部具有相同代码的两个单独循环是没有用的,因为此循环在代码上的多个位置上重复
  • 在函数内打包循环的内容是不可取的
  • 检查x边界并在循环内更新其值也是不可取的(我的意思是,检查x == 5然后将其更改为10)

我搜索过SO,但找不到任何解决方案.

提前致谢!

javascript node.js

0
推荐指数
1
解决办法
1706
查看次数