我正在使用Angular 6和HTTP Interceptor配置为将承载令牌应用于传出请求.
在dev build(ng serve)中,应用了令牌,一切正常. :-)
在生成build(ng serve --prod)中,请求是在没有承载令牌的情况下发出的. :-(
在prod构建中,我通过在应用它们之后将标头转储到控制台来验证正在应用标头.
我不知道为什么他们被排除在http请求之外.
我的environment文件没有差异.
我还应该注意什么?
我该怎么做才能解决这个问题?
起初我认为这是我的本地环境和我的暂存环境之间的问题,但后来我尝试在ng serve --prod本地运行并看到相同的结果.
所有这一切,除了一个是生产构建和一个开发构建之外,一切都是相同的.
智威汤逊拦截:
import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable()
export class JwtInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
let currentUser = JSON.parse(localStorage.getItem('currentUser'));
if (currentUser && currentUser.token) …Run Code Online (Sandbox Code Playgroud) 我在 AWS 上有一个生产系统并使用 Laravel Forge。有一个正在处理作业的默认队列。
我已经创建了许多作业,现在希望删除它们(因为它们需要很多小时才能完成,而且我意识到我的输入数据很糟糕)。我创建了一个具有良好数据的新作业,但只有在所有其他作业完成后才会对其进行处理。
如何删除所有作业?
redis它之前是使用队列驱动程序设置的。我不知道如何删除作业,因此我将驱动程序切换到database,并重新启动服务器,认为这至少会让作业停止处理。然而,令我沮丧的是,它们仍在继续处理:-(
我什至从 forge ui 中删除了工作程序并重新启动了服务器:作业仍在处理。
为什么作业会继续被处理?
我怎样才能阻止他们?
我想知道behaviorSubject.value. 根据这个答案,我们应该只通过订阅获得价值。
一个对我来说似乎没问题的情况是我使用.value来确定下一个值来推送流,就像我切换一个简单的布尔值一样:
myBoolSubject = new BehaviorSubject(false);
toggle() {
this.myBoolSubject.next(!this.myBoolSubject.value);
}
Run Code Online (Sandbox Code Playgroud)
使用的替代方法subscribe()如下:
toggle() {
this.myBoolSubject.pipe(take(1)).subscribe(
val => this.myBoolSubject.next(!val)
);
}
Run Code Online (Sandbox Code Playgroud)
通过查看rxjs 源代码和上述答案,这两种方法之间的区别在于.value:
在这个简单的例子中,我不会完成这个主题,我不认为错误是一个问题,因为我只是通过这个主题推送简单的布尔值。
这是一个有效的用例behaviorSubject.value吗?还有其他人吗?
另一种似乎可以使用的情况.value是从先前发出的值构造一个新对象时:
private state = new BehaviorSubject<State>(INITIAL_STATE);
public state$ = this.state.asObservable();
public updateState(changes: Partial<State>){
const newState = {...this.state.value, ...changes};
this.state.next(newState);
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是将最新的状态发射缓存在另一个变量中,如下所示:
private _state = INITIAL_STATE;
private state = new BehaviorSubject<State>(INITIAL_STATE);
public state$ = this.state.asObservable();
public updateState(changes: Partial<State>){
const …Run Code Online (Sandbox Code Playgroud) 我正在关注使用Pusher设置广播的Laravel文档,它看起来非常直接,但我还没有完成它,所以我一定在某个地方犯了一个错误.
这就是我所做的:
服务器端
我创建了一个Event实现ShouldBroadcastNow接口并定义broadcastsOn()方法的方法.
class ThreadMessageCreated implements ShouldBroadcastNow {
use Dispatchable, InteractsWithSockets, SerializesModels;
public function broadcastOn() {
return new Channel('bobtest');
}
Run Code Online (Sandbox Code Playgroud)
我正从我的一个API控制器中提取事件:
public function createMessage(Thread $thread, Request $request) {
...
event(new ThreadMessageCreated($message, $thread));
return $message;
}
Run Code Online (Sandbox Code Playgroud)
我在我的.env文件中配置了推送凭据.
客户端
我在客户端配置了Laravel Echo(通过angular-laravel-echo包)并将我的客户端订阅了该频道.
ngOnInit() {
this.echo
.join('bobtest', 'public')
.listen('bobtest', 'ThreadMessageCreated')
.subscribe(()=>alert('message received'));
console.log(this.echo);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我的API端点被命中时,事件被触发,但我在客户端看不到任何内容.
所以,我在broadcastOn()方法中添加了日志以验证它是否被调用.然后我将驱动程序从更改pusher为log,我确实看到广播信息被写入laravel.log文件.
因此,我假设在使用Pusher驱动程序时也会发生广播,并且要么没有从Laravel发出,要么没有被客户端接收.
我是插座,推杆和Laravel Echo的新手,所以我不知道在哪里可以找到更多信息来追踪它.
laravel.log文件中看到任何错误.我正在我的平台中实现 WebSockets 连接。我在前端使用 Angular 10,并在 SockJS Client 1.5.0 上使用 StompJS 2.3.3 来建立与后端的连接。
我创建了一个 WebSockets 服务来管理连接,它正在连接并且工作正常。
这是我创建的服务:
export class WebSocketsService implements OnDestroy {
/**
* The authentication service to get the token from.
*/
private authenticationService: AuthenticationService;
private serverUrl = environment['ceNotificationsServer'];
private socket;
private state: BehaviorSubject<SocketClientState>;
public constructor(authenticationService: AuthenticationService) {
this.authenticationService = authenticationService;
const client_id = environment['ceNotificationsClientId'];
const token = this.authenticationService.getToken();
const url = this.serverUrl + '/websocket' + '?clientId=' + client_id + '&Authorization=' + token;
const ws = new SockJS(url);
this.socket …Run Code Online (Sandbox Code Playgroud) 使用 Laravel Framework (5.6) 时,PhpStorm 在通过如下外观访问时无法识别方法:
$user = User::find($id);
Run Code Online (Sandbox Code Playgroud)
所以它总是抱怨:“在用户中找不到方法‘find’”
我有 Laravel 插件和 Barry IDE 助手。我还需要做什么?