在Angular 6(和RxJS)应用程序中,我有一个管理登录的效果。它首先调用服务器,然后设置并解码令牌。最后,我添加了处理重定向的最后一个操作。
情况是这样的:用户(未登录)尝试访问个人资料页面。在AuthGuard中,我拦截它,并保存所需的页面(auth-guard.service.ts):
.. Here I already know that the user is not authenticated.
let url = state.url;
if (url) {
.. I save in the Store the url
this.store.dispatch(new CoreActions.SaveRedirectUrl(url));
}
this.router.navigate(['/login']);
return false;
这是Auth效果的最后两部分(Auth.effects.ts,在我发送操作DO\u登录时调用):
, mergeMap((tokenObj: any) => {
return [
{
type: AuthActions.LOGIN
},
{
type: AuthActions.SET_TOKEN,
payload: tokenObj.token
},
{
type: ProfileActions.DECODE_TOKEN,
payload: tokenObj.token
}
];
})
, exhaustMap(() => {
return this.store.select('core')
.pipe(
map(coreState => {
if (coreState.redirectUrl) {
this.router.navigate([coreState.redirectUrl]);
} else {
this.router.navigate(['/']);
}
new CoreActions.RemoveRedirectUrl();
}));
}),
因此,我正在研究这种行为:在用户登录后,我保存令牌,我(最终)重定向到所需页面,然后从状态中删除该页面。我确信第一个mergeMap()可以工作。。当我添加最后一个部件(排气图)时,所有部件都损坏了,我无法找到控制台错误的解决方案:
ERROR错误:效果"AuthEffects.authLogin$"发送了一个无效的操作:未定义
如果我更改最后一次“返回”的位置:
this.store.select('core') -----> from here
.pipe(
map(coreState => {
if (coreState.redirectUrl) {
this.router.navigate([coreState.redirectUrl]);
} else {
this.router.navigate(['/']);
}
return new CoreActions.RemoveRedirectUrl(); -----> to here
}));
我有一个编译错误在用尽地图():
类型为“(”的参数=
使用Angular 6和rxjs 6.0。0
:
我最近在管理我的ngrx
登录时遇到了类似的问题,并且遵循了与您上面描述的类似的模式。在我的$login
效果中,我最初有:
@Effect()
login$ = this.actions$.pipe(
ofType<Login>(AuthActionTypes.Login),
map(action => action.payload),
exhaustMap((auth: Authenticate) =>
this.authService.loginWithUsernameAndPassword(auth).pipe(
map(user => {
if (user && user.token) {
this.cookieService.set('token', user.token)
}
new LoginSuccess({user})
return user;
}),
catchError(error => of(new LoginFailure(error)))
)
)
);
我返回了用户
,这给了我一个错误,所以我放弃了它,只是尝试创建新的登录成功({user})
。不过,这也给了我一个类似于您上面描述的错误的错误。我认为pipe()
中的map()
函数不需要副作用。我只是通过使用tap()。一旦我这样做了,一切都按预期进行——没有错误或异常。
@Effect()
login$ = this.actions$.pipe(
ofType<Login>(AuthActionTypes.Login),
map(action => action.payload),
exhaustMap((auth: Authenticate) =>
this.authService.loginWithUsernameAndPassword(auth).pipe(
// user tap to set my cookie and achieve my side effect
tap(user => {
if (user && user.token) {
this.cookieService.set('token', user.token)
}
}),
// use map without any side effect
map(user => new LoginSuccess({ user })),
catchError(error => of(new LoginFailure(error)))
)
)
);
我正在尝试为我的登录构建一个提交表单,但我不知道为什么这个操作不起作用。有什么想法吗? > 列表项jquery $(“Form”).Submit(函数(e){e.PreventDefault();switch(this.id){case“login-form”:var$lg_username=$('#login_username').val();var$lg_password=$('#login_
问题内容: 我正在尝试连接到本地oracle数据库,但是却收到此错误消息: 。 我很确定这是由于我传递的数据库连接参数出错,但实际上,此错误消息对我没有任何帮助。关于我做错了什么的任何提示将不胜感激。 仅供参考:用于连接的代码如下,除了硬编码的字符串,这是在我们的生产环境中使用并在此处工作的代码。 问题答案: 令人惊讶的是,在将以下两行添加到创建连接的代码中之后,它开始工作了。 我不明白为什么我们
如果第一个作业的爆发时间是最高的,FCFS可能会受到队列影响。 就像在现实生活中一样,如果队列在路上经过,那么其他人可能会被堵塞,直到完全通过。 这也可以在操作系统中进行模拟。 如果CPU在就绪队列的前端获得较高突发时间的进程,则较低突发时间的进程可能被阻塞,这意味着如果执行中的作业具有非常高的突发时间,则它们可能永远不会获得CPU。 这被称为队列效应或饥饿。 示例 在这个例子中,我们有个进程被命
我正在使用PHPMailer通过联系人表单发送电子邮件。当我在输入字段中输入无效的电子邮件地址时,电子邮件仍会发送。我想同时执行客户端和服务器端验证。 PHPMailer是否有一个内置的验证系统来检查无效的电子邮件地址?如果输入的电子邮件无效,我想返回一个错误,而不是发送电子邮件。
我刚刚开始学习现代OpenGL,我在渲染三角形时遇到了麻烦。当我启动程序时,当我尝试调用时,它会给出一个无效操作异常。从控制台日志的外观来看,着色器的设置没有错误,程序也经过了验证。很多代码都是从本教程中复制的。我已经搜索了几个小时,无法找出导致问题的原因。如果我错过了一些基本的东西,我真的很抱歉。 java程序: 顶点着色器: 和片段着色器:
真的很奇怪,为什么在将挂起状态更改为之后,第一个操作的位置没有改变。 打印输出: 预期打印输出: UPD只注意到的这种行为。对于具有的自定义按预期工作。