Не могу задать запрос Body of Post с использованием Angular HttpClient edit, который я не могу сделать (поставить, удалить, опубликовать любой запрос, только получить работает) - PullRequest
0 голосов
/ 03 января 2019

Я новичок в Angular, и Node я создал конечную точку Rest в NodeJS, которая выглядит следующим образом (обновите это работает, но только если я установил заголовок запроса на application / x-www-form-urlencoded, но тогда тело запроса выглядиткак {{"roleName": "new role"}: ""} это вместо {roleName: "newRole"})

public static routes(app: Application): void {
  app
    .route("/roles")
    .get((req: Request, res: Response) => {
      RoleC.allRoles().then(roles => res.status(200).send(roles));
    })
    .post((req: Request, res: Response) => {
      console.log(req);
      res.status(200).send(req.body);
      // RoleC.addRole(req.body.roleName).then(r => res.status(200).send(r));
    });
}

, и я делаю почтовый запрос из углового приложения, которое выглядит какthis

addRole(role: Role) {
  console.log(JSON.stringify(role));
  this.http
    .post(this.baseURL, role)
    .subscribe(e => console.log("r", e), err => console.log("er", err));
}

Но проблема в том, что я не могу установить тело запроса, когда использую почтальон, он работает как надо, но с углового, тело всегда пустое, я даже пытался использовать fetch вместо этого, но то же самоеПроблема даже пытается установить заголовки и методы в приложении узла, как это

this.app.use(bodyParser.json());
this.app.use(bodyParser.urlencoded({
  extended: false
}));
this.app.all("*", (req: Request, res: Response, next: NextFunction) => {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Methods", "*");
  res.header(
    "Access-Control-Allow-Headers",
    "Content-Type, Authorization, Content-Length, X-Requested-With"
  );
  next();
});

, но все же, не удается выполнить запрос на публикацию, однако запрос get работает нормально, и я пытаюсь сделать запрос на этот URL отjson placeholder https://jsonplaceholder.typicode.com/posts работает нормально. Я не могу понять, в чём заключается ошибка, и я знаю, что ссылка json работает, потому что она выдает тело запроса в ответе.Если я не использую JSON.Stringify, я получаю ошибочную ошибку, но согласно документации она должна работать нормально, но запрос get не будет выглядеть так:

 Roles(): Observable<object> {
let httpHeaders = new HttpHeaders({
  "Content-Type": "application/json",
  "Access-Control-Allow-Origin": "*"
});
return this.http.get(this.baseURL);

}

, если я добавлю{Заголовки: httpHeader} с требованием я получаю ошибку Cors, но если использовать его без него, он работает нормально.не могу сделать, удалить или отправить запрос, но они работают в почтальоне, я даже попытался установить тип содержимого и заголовки Alloe-Acccess, но, похоже, ничего не работает

это угловая служба, где я делаю запрос

import { HttpClient, HttpHeaders } from "@angular/common/http";
import { Role } from "./../models/role/role";
import { Injectable } from "@angular/core";
import { Subject, Observable } from "rxjs";

@Injectable({
 providedIn: "root"
})
export class RoleService {
readonly baseURL = "http://127.0.0.1:3000/roles";
updateRole: Subject<Role[]> = new Subject<Role[]>();
private roles: Role[] = [];
constructor(private http: HttpClient) {}
get Roles(): Observable<object> {
let httpHeaders = new HttpHeaders({
  "Content-Type": "application/json"
});
return this.http.get(this.baseURL);
}
 getRole(id: number): Role {
 return this.roles[id];
}
addRole(role: Role) {
let httpHeaders = new HttpHeaders({
  "Access-Control-Allow-Headers":
    "Content-Type, Authorization, Content-Length, X-Requested-With",
  "Access-Control-Allow-Origin": "*",
  "Content-Type": "application/json"
});
console.log(JSON.stringify(role));
this.http
  .post(this.baseURL, role, { headers: httpHeaders })
  .subscribe(e => console.log("r", e), err => console.log("er", err));
//this.updateRole.next(this.Roles);
}
}

это код узла

import * as express from "express";
import { Request, Response, NextFunction } from "express";
import * as bodyParser from "body-parser";
import IndexRoutes from "./routes/indexRoute";
import TestRoutes from "./routes/testRoute";
import UsersRoutes from "./routes/userRoute";
import RoleRoutes from "./routes/roleRoute";
import DepartmentRoutes from "./routes/department";
import RemunerationRoutes from "./routes/remunerationRouter";
import PayRoutes from "./routes/payRoute";
import FacultyRoutes from "./routes/FacultyRoute";
class App {
public app: express.Application;
constructor() {
this.app = express();
this.config();
IndexRoutes.routes(this.app);
TestRoutes.routes(this.app);
UsersRoutes.routes(this.app);
RoleRoutes.routes(this.app);
DepartmentRoutes.routes(this.app);
FacultyRoutes.routes(this.app);
RemunerationRoutes.routes(this.app);
PayRoutes.routes(this.app);
this.error();
}

 private config(): void {
 this.app.all("*", (req: Request, res: Response, next: NextFunction) => {
  res.header(
    "Access-Control-Allow-Headers",
    "Content-Type, Authorization, Content-Length, X-Requested-With"
  );
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Methods", "*");
  next();
});
  this.app.use(bodyParser.json());
}
 private error(): void {
this.app.use((req: Request, res: Response) => {
  res.status(404).send({
    msg: <string>`404 ${req.path} not fount`
  });
});
}
}
export default new App().app;

, если я установил заголовок для запроса get, даже если он его тормозит

Ответы [ 2 ]

0 голосов
/ 03 января 2019

В вашем коде js узла попробуйте разрешить часть среднего уровня начала координат, прежде чем читать тело входящего запроса. Это означает, что вы должны переместить средний слой анализатора тела после разрешения исходной части. Для углового кода в заголовке просто добавьте тип содержимого. Это предположение, попробуйте. Может быть, это поможет вам.

--- угловой код ---

const httpOptions = {
headers: new HttpHeaders({
'Content-Type':  'application/json'
  })
};
this.http
  .post(this.baseURL, role,httpOptions )
 .subscribe(e => console.log("r", e), err => console.log("er", err));
 }
0 голосов
/ 03 января 2019

Вам не нужно структурировать тело, вы можете передать сам объект. Просто удалите console.log(JSON.stringify(role)); и попробуйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...