我實際上已經創建了一個角度服務來從在 'localhost:8080/' (endpoint /user) 上運行的服務器獲取資料。但是當我在 'localhost:4200' 上提供 angular 專案時,它出現了這個錯誤:Access to XMLHttpRequest at 'localhost:8080/user' from origin ..
我試圖通過在控制器中添加 @CrossOrigin(origins = "*") 來解決這個問題,并在我在這里找到的角度專案中添加 proxy.conf.json:'https://angular.io/guide/build ' 但問題依然存在。
這是角度服務:
@Injectable({
providedIn: 'root'
})
export class RestService {
api = 'localhost:8080/user'
constructor(private http: HttpClient) { }
getUsers(): Observable<String> {
return this.http.get<String>(this.api);
}
}
這是我的 proxy.conf.json :
{
"/*": {
"target": "http://localhost:8080",
"secure": false,
"logLevel": "debug"
}
}
這是 angular.json 中的 conf:
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "crud:build",
"proxyConfig": "src/proxy.conf.json"
}
這是彈簧啟動控制器:
@RestController
@CrossOrigin(origins = "*")
public class userController {
@GetMapping("/user")
public String getuser(){
return "the user name is bilel" ;
}
}
uj5u.com熱心網友回復:
要構建@Alain Boudard 的答案,您需要添加路徑重寫:
export class RestService {
baseUrl = 'api/user'
constructor(private http: HttpClient) { }
getUsers(): Observable<string> {
return this.http.get<string>(this.baseUrl);
}
}
并且在 proxy.conf.json 檔案中,不要忘記 pathRewrite 以便在呼叫后端之前從 URL 中洗掉“api”:
{
"/api/*": {
"target": "http://localhost:8080",
"secure": false,
"logLevel": "debug",
"changeOrigin": true,
"pathRewrite": {
"^/api": ""
}
}
}
PS:順便說一句,您很少需要使用 String 型別,而是使用原始字串(小寫 s):https ://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-不-ts.html
uj5u.com熱心網友回復:
您不想告訴您的 Angular 服務有關目標服務器及其埠的資訊,因為它反對使用代理 conf。
呼叫類似通用 api/ 根端點的東西并映射它:
export class RestService {
api = '/api/user'
constructor(private http: HttpClient) { }
getUsers(): Observable<String> {
return this.http.get<String>(this.api);
}
}
和這樣的代理:
{
"/api": {
"target": "http://localhost:8080",
"secure": false
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/446005.html
上一篇:Haskell無法識別型別
下一篇:垃圾收集器與IOC
