我已经使用 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)?
我有一个应用程序,在该应用程序上我只需要在启动时提供登录功能,并且在用户进行身份验证后应该延迟加载所有剩余的代码。
我创建了一个core.module与核心routing.module和core.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) 我试图从蒙戈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) 我有一个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谷歌搜索,但在这种情况下没有找到任何东西。任何帮助表示赞赏。
我有一个典型的 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
如何存储和使用来自变量的管道信息?
我已经搜索了很多,但找不到解决方案。
我想要实现的是将任何有效的管道信息作为变量(十进制、百分比、日期、自定义等)传递。遵循一个简单的例子:
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 应用程序从版本 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) 我已经搜索了一段时间,但找不到关于该内容或AWS的任何官方文档的明确答案。
我有一个Lambda函数,需要根据我的时区获取当前日期,但是我不确定我可以依靠哪个前提来做到这一点,并且由于这是一个关键应用程序,因此我不能简单地依靠单一测试或经验结果。
我希望lambda函数遵循托管于其上的AWS地区的时区,或者遵循任何GMT 0的唯一时区,但是无法在任何地方进行确认。
任何人都可以澄清一下它是如何工作的,如果可能的话,还请指向任何与此有关的官方文档?另外,还有与夏时制有关的特殊问题吗?
我的Lambda函数是在NodeJS上编写的,而我正在本地(在我的机器上)执行的用于检索当前日期时间的操作正在使用new Date()。
我正在使用 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 bindCallback和bindNodeCallback方法以及另一个问题,但不知道如何做到这一点。
如何做到这一点?
我正在开发一个解决方案,我需要循环通过两个独立的连续数字范围.让我们说例如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)
这段代码完成了这项工作,但是有很多开销和不必要的操作:
是否有更简单/更有效的方法来执行此类操作? 像这样的东西:
for(x = 1 to 5, then x = 10 to 15) {
// do something with x
}
Run Code Online (Sandbox Code Playgroud)
约束:
我搜索过SO,但找不到任何解决方案.
提前致谢!
angular ×4
aws-lambda ×3
javascript ×3
node.js ×2
angular-pipe ×1
angular6 ×1
angular9 ×1
aws-sdk ×1
mongodb ×1
rxjs ×1
websocket ×1