Angular 2 POST to Laravel Rest API doesn't unless port number is changed
Angular 2 POST to Laravel Rest API doesnt unless port number is changed
我做了一个 laravel 和 angular 2 API - 它基本上对 laravel 后端 API 做了一个 post 请求.当我 运行 php artisan 从根文件夹提供服务并且 npm 从 public 文件夹启动时,一切都完美无缺,public 文件夹通过端口 3000 提供服务,artisan 提供 api 通过端口 8000
这是我的服务文件在默认 artisan 端口 8000 和本地主机作为 API url
时的样子
import {Http, Headers, Response} from "@angular/http"
import {Injectable} from "@angular/core"
import {ICourse} from "../interfaces/ICourse"
import 'rxjs/Rx';
import {Observable} from 'rxjs/Observable';
import {Observer} from 'rxjs/Observer';
import 'rxjs/add/operator/share';
import 'rxjs/add/operator/map';
@Injectable()
export class Api {
apiUrl: string = "http://localhost:8000/api/courses/";
headers: Headers = new Headers;
courses$: Observable<ICourse[]>;
private _coursesObserver: Observer<ICourse[]>;
private _dataStore: {
courses: ICourse[]
};
constructor(private _http: Http) {
this.headers.append('Content-Type', 'application/x-www-form-urlencoded');
this.headers.append('X-Requested-With', 'XMLHttpRequest');
this.courses$ = new Observable<ICourse[]>(observer => this._coursesObserver = observer).share();
this._dataStore = { courses: [] };
}
public createCourse(course) {
return new Promise((resolve, reject) => {
this._http.post(this.apiUrl, course, {
headers: this.headers
}).map((res: Response) => res.json()).subscribe(
(res) => {
resolve(res);
console.log('api succeeds');
},
(error) => {
alert('error');
reject(error);
}
);
})
}
}
当我将 api url 更改为像 http://www.example.com/api/course 这样的完全限定域时,它不仅会执行 GET 请求而不是 POST 但它不会执行什么都没有...我浏览了源代码,试图弄清楚到底发生了什么,但我真的很困惑..以前有人遇到过这个吗?还要注意的是,我可以使用真实域,但是我必须从不同的端口 php artisan
您是否将 apiUrl 属性 更改为实时服务器的?
您还需要一个令牌。您可以将 {{ csrf_field() }}
添加到包含 angular 应用程序的页面顶部,但您需要它,就像 laravel 中的任何 post 请求一样。我还没有真正研究过在两个独立的服务器之间发送响应,但如果你要走那条路线,jwt 可能就是诀窍。
不久前我写了一篇关于这个的小文章,它不是很透彻,但可以提供帮助check it out
我做了一个 laravel 和 angular 2 API - 它基本上对 laravel 后端 API 做了一个 post 请求.当我 运行 php artisan 从根文件夹提供服务并且 npm 从 public 文件夹启动时,一切都完美无缺,public 文件夹通过端口 3000 提供服务,artisan 提供 api 通过端口 8000
这是我的服务文件在默认 artisan 端口 8000 和本地主机作为 API url
时的样子 import {Http, Headers, Response} from "@angular/http"
import {Injectable} from "@angular/core"
import {ICourse} from "../interfaces/ICourse"
import 'rxjs/Rx';
import {Observable} from 'rxjs/Observable';
import {Observer} from 'rxjs/Observer';
import 'rxjs/add/operator/share';
import 'rxjs/add/operator/map';
@Injectable()
export class Api {
apiUrl: string = "http://localhost:8000/api/courses/";
headers: Headers = new Headers;
courses$: Observable<ICourse[]>;
private _coursesObserver: Observer<ICourse[]>;
private _dataStore: {
courses: ICourse[]
};
constructor(private _http: Http) {
this.headers.append('Content-Type', 'application/x-www-form-urlencoded');
this.headers.append('X-Requested-With', 'XMLHttpRequest');
this.courses$ = new Observable<ICourse[]>(observer => this._coursesObserver = observer).share();
this._dataStore = { courses: [] };
}
public createCourse(course) {
return new Promise((resolve, reject) => {
this._http.post(this.apiUrl, course, {
headers: this.headers
}).map((res: Response) => res.json()).subscribe(
(res) => {
resolve(res);
console.log('api succeeds');
},
(error) => {
alert('error');
reject(error);
}
);
})
}
}
当我将 api url 更改为像 http://www.example.com/api/course 这样的完全限定域时,它不仅会执行 GET 请求而不是 POST 但它不会执行什么都没有...我浏览了源代码,试图弄清楚到底发生了什么,但我真的很困惑..以前有人遇到过这个吗?还要注意的是,我可以使用真实域,但是我必须从不同的端口 php artisan
您是否将 apiUrl 属性 更改为实时服务器的?
您还需要一个令牌。您可以将 {{ csrf_field() }}
添加到包含 angular 应用程序的页面顶部,但您需要它,就像 laravel 中的任何 post 请求一样。我还没有真正研究过在两个独立的服务器之间发送响应,但如果你要走那条路线,jwt 可能就是诀窍。
不久前我写了一篇关于这个的小文章,它不是很透彻,但可以提供帮助check it out