我试图在每个以Angular 2结尾的请求中添加一个加载微调器,所以我扩展了Http服务,调用它为HttpService.在每个请求之后,我想在捕获错误后调用finally()函数,以便我可以停止加载微调器.
但是打字稿说:
[ts]属性'finally'在'Observable'类型中不存在.
import { AuthService } from './../../auth/auth.service';
import { Injectable } from '@angular/core';
import { Http, XHRBackend, RequestOptions, RequestOptionsArgs, Request, Response, Headers } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
@Injectable()
export class HttpService extends Http {
constructor(
backend: XHRBackend,
options: RequestOptions,
private authservice: AuthService
) {
super(backend, options);
this.updateHeaders(options.headers);
}
request(url: string|Request, options?: RequestOptionsArgs): Observable<Response> {
return super.request(url, options)
.catch((response: Response) => this.authError(response))
.finally(() => {
// ...
/* Do something …
Run Code Online (Sandbox Code Playgroud) Go类型喜欢Int64
并且String
不能存储空值,所以我发现我可以使用sql.NullInt64和sql.NullString.
但是当我在Struct中使用它们,并使用json包从Struct生成JSON时,格式与我使用常规Int64
和String
类型时的格式不同.
JSON有一个额外的级别,因为sql.Null***也是一个Struct.
有没有一个很好的解决方法,或者我不应该在我的SQL数据库中使用NULL?
在AngularJS中有一个名为ng-messages的表单指令,它帮助我们实现它,以便不会同时显示所有表单错误.因此,例如,如果输入有3个错误:required,minlength,maxlength.然后只需要显示,在需要后有效,然后显示minlength.如果没有ng-messages,我们需要做一些非常复杂和丑陋的逻辑,以便只显示必需而不显示其余部分,同时还要考虑只有在窗体控件也脏/触摸且无效时才会显示错误.
在AngularJS中,这将是:
<div ng-messages="form.username.$error" ng-if="form.username.$touched || form.username.$dirty">
<div ng-message="required">Please enter a username.</div>
<div ng-message="minlength">Username must be at least 3 characters.</div>
<div ng-message="maxlength">Username can't exceed 30 characters.</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我们怎样才能以优雅的方式在Angular中实现这一目标?
如果我有一个像这样的简单SELECT语句:
SELECT JSON_EXTRACT('{"username":"Alexander"}', '$.username');
Run Code Online (Sandbox Code Playgroud)
我希望它会返回Alexander
,但它会返回"Alexander"
.我该如何摆脱报价?为什么这个函数甚至也会返回引号?
我已经提出了TLS并且它有效.我知道如何在nginx中从http重写为https,但我不再使用nginx了.我不知道如何在Go中正确地做到这一点.
func main() {
certificate := "/srv/ssl/ssl-bundle.crt"
privateKey := "/srv/ssl/mykey.key"
http.HandleFunc("/", rootHander)
// log.Fatal(http.ListenAndServe(":80", nil))
log.Fatal(http.ListenAndServeTLS(":443", certificate, privateKey, nil))
}
func rootHander(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("To the moon!"))
}
Run Code Online (Sandbox Code Playgroud)
我怎么能以这种方式做到这一点?
我不确定何时使用RWMutex以及何时使用Mutex.
如果您使用RWMutex而不是Mutex,如果您执行更多读取然后写入,您是否节省了资源?
我看到有些人不管他们做什么都会一直使用Mutex,有些人使用RWMutex并运行这些方法:
func (rw *RWMutex) Lock()
func (rw *RWMutex) Unlock()
func (rw *RWMutex) RLock()
func (rw *RWMutex) RUnlock()
Run Code Online (Sandbox Code Playgroud)
而不只是:
func (m *Mutex) Lock()
func (m *Mutex) Unlock()
Run Code Online (Sandbox Code Playgroud)
如果您节省了资源,那么如果您执行更多读取然后写入,那么您应该使用RWMutex吗?
我已经看过几个例子,你从那里读r.Body
,然后r.Body.Close()
马上做一个延迟。如果我们不关闭它会发生什么?
假设我有一个http.Handler
,在里面我像这样解码 r.Body 的内容:
func createFeedback(w http.ResponseWriter, r *http.Request) {
// ... Some code ...
f := feedback.New()
if err := json.NewDecoder(r.Body).Decode(f); err != nil {
return err
}
defer r.Body.Close()
// ... Some more code ...
}
Run Code Online (Sandbox Code Playgroud)
为什么我们要关闭r.Body
?
我试图在后台运行一个进程作为deamon但它只有在我使用root作为用户时才有效.
这就是我做的.
在他们的网站上告知安装的主管
$ yum -y install python-setuptools
$ easy_install supervisor
Run Code Online (Sandbox Code Playgroud)
创建了配置文件夹
$ mkdir -p /etc/supervisor/conf.d
Run Code Online (Sandbox Code Playgroud)
使用默认设置填充
$ echo_supervisord_conf > /etc/supervisor/supervisord.conf
Run Code Online (Sandbox Code Playgroud)
添加新用户
$ useradd gogopher
Run Code Online (Sandbox Code Playgroud)
在CentOS 7上让它自动启动我必须这样做
$ vim /usr/lib/systemd/system/supervisord.service
Run Code Online (Sandbox Code Playgroud)
添加了下面的代码
[Unit]
Description=supervisord - Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecReload=/usr/bin/supervisorctl reload
ExecStop=/usr/bin/supervisorctl shutdown
User=gogopher
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
现在我可以启用它,以便它在重启时启动.一切正常.
$ systemctl enable supervisord
$ systemctl start supervisord
$ systemctl status supervisord
Run Code Online (Sandbox Code Playgroud)
好
编辑配置文件以包含conf.d文件夹中的文件
$ vim /etc/supervisor/supervisord.conf
Run Code Online (Sandbox Code Playgroud)
在文件末尾添加
[include]
files = /etc/supervisor/conf.d/*.conf
Run Code Online (Sandbox Code Playgroud)
添加一个简单的程序
$ vim …
Run Code Online (Sandbox Code Playgroud) 在Angular 2中,有一些您不需要取消订阅的可观察对象.例如http requests和activatedRoute.params.
但是当我使用switchMap时会发生什么情况,例如activatedRoute.params,并且在switchMap内部我访问一个服务,该服务返回一个observable,如果以通常的方式订阅则需要取消订阅.
像这样的东西:
this.activatedRoute.params
.switchMap((params: Params) => this.userService.getUser(+params['id']))
.subscribe((user: User) => this.user = user);
Run Code Online (Sandbox Code Playgroud)
如果我在没有switchMap且没有activateRoute.params的情况下调用this.userService,我将不得不取消订阅.
// userService.getUser() takes in optional id?: number.
this.subscription = this.userService.getUser().subscribe(
(user: User) => {
this.user = user;
}
);
Run Code Online (Sandbox Code Playgroud)
然后......
this.subscription.unsubscribe();
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我在其上使用switchMap并调用需要取消订阅的服务,是否需要取消订阅activatedRoute.params?
我已经看到@Attribute()通常在指令中用作构造函数中的参数,如下所示:
export class EqualValidator implements Validator {
constructor( @Attribute(‘validateEqual’) public validateEqual: string) {}
validate(c: AbstractControl): { [key: string]: any } {}
}
Run Code Online (Sandbox Code Playgroud)
和@Input()在这样的组件中使用:
export class UserProfile {
@Input() user;
constructor() {}
}
Run Code Online (Sandbox Code Playgroud)
然后,在@Input()的情况下,您可以使用属性绑定将数据传递到模板中的这些变量.
这些装饰器之间的主要区别是什么?何时应该使用它们?