iCo*_*ode 11 econnreset angular-cli angular
我是Angular(2,4)的新手.我试图连接到代理服务器.
proxy.config.json
在项目根目录中添加
{
"/api/*": {
"target": "http://<server_ip_address>:<port>",
"secure": false,
"changeOrigin": true,
"logLevel": "debug"
}
}
Run Code Online (Sandbox Code Playgroud)
然后start
在package.json中添加了代理配置
"scripts": {
"ng": "ng",
"start": "ng serve --proxy-config proxy.config.json",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
Run Code Online (Sandbox Code Playgroud)
现在在组件中我有一个连接到服务器的登录方法.
import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { AlertService, AuthenticationService } from '../services/index';
@Component({
moduleId: module.id.toString(),
templateUrl: 'login.component.html'
})
export class LoginComponent implements OnInit {
model: any = {};
loading = false;
returnUrl: string;
constructor(
private route: ActivatedRoute,
private router: Router,
private authenticationService: AuthenticationService,
private alertService: AlertService) { }
login() {
this.loading = true;
this.authenticationService.login(this.model.email, this.model.password)
.subscribe(data => {
localStorage.setItem('currentUser', JSON.stringify(data));
this.router.navigate([this.returnUrl]);
},
error => {
this.alertService.error(error);
this.loading = false;
},
() => {
console.log("Subscribed Else");
});
}
}
Run Code Online (Sandbox Code Playgroud)
在身份验证服务中,我有以下代码.
import { Injectable } from '@angular/core';
import { Http, Headers, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
@Injectable()
export class AuthenticationService {
headers = new Headers();
constructor(private http: Http) {
this.headers.append("Content-Type", "application/json");
}
login(email: string, password: string) {
return this.http.post('/api/v1/login', { email: email, password: password }, { headers: this.headers })
.map(this.extractData)
.catch(this.handleError);
}
private extractData(response: Response) {
let user = response.json();
return user;
}
private handleError(error: Response | any) {
// In a real world app, you might use a remote logging infrastructure
let errMsg: string;
let resMsg: string;
if (error instanceof Response) {
const body = error.json() || '';
resMsg = body['message'];
console.log(body);
console.log(resMsg);
} else {
resMsg = error.message ? error.message : error.toString();
}
return Observable.throw(resMsg);
}
}
Run Code Online (Sandbox Code Playgroud)
连接工作正常.服务器使用正确的JSON数据进行响应.但我可以登录.
真正的问题
有点奇怪.有时它工作正常,但大多数它甚至在正确连接到服务器后也显示出问题.服务器使用JSON数据进行响应.然后在终端控制台中显示
[HPM]尝试将请求/ api/v1 /登录从localhost:4200代理到http://:(ECONNRESET)(https://nodejs.org/api/errors.html#errors_common_system_errors)时发生错误
如果我检查chrome网络控制台,请求的状态就可以了.但是在预览选项卡中,它显示来自服务器的JSON,然后附加以下字符串"尝试代理时发生错误:localhost:4200/api/v1/login"
{"name":"something","id":"12sde"}Error occured while trying to proxy to: localhost:4200/api/v1/login
Run Code Online (Sandbox Code Playgroud)
因为JSON解析会出错.
为什么问题有时发生而不是总是?那实际问题是什么?
PS:我正在使用角度 - 4.0.0,angular-cli 1.0.2
当您使用 Angular CLI 时,您正在使用 Webpack 开发服务器:链接到他们的 Github。您所做的就是将代理文件的路径传递到 CLI,然后 CLI 会下载它并将其传递到 webpack-dev-server。
关于这个问题,据报道删除“/api/*”中的 * 可能会解决您的问题。
归档时间: |
|
查看次数: |
15859 次 |
最近记录: |