Le serveur NodeJS ne peut pas récupérer les données de publication depuis Angular

J’ai un serveur principal écrit dans NodeJS, qui utilise express.

J’ai la dernière Angular en tant que frontend, je poste des données (fichier GPG) sur le serveur nodeJS et j’essaie de les obtenir en code NodeJS et de les imprimer dans la console du serveur, mais tout ce que j’ai est un object vide.

Tout ce que je veux faire est de transmettre les données Blob au serveur de nœud ou de transmettre un texte brut au serveur de nœud et de le lire à partir du code de nœud.

const express = require('express'), app = express(), port = process.env.PORT || 3000; app.listen(port); const cors = require('cors'); app.use(cors()); //create a cors middleware app.use(function (req, res, next) { //set headers to allow cross origin request. res.header("Access-Control-Allow-Origin", "*"); res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS'); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); const bodyParser = require('body-parser'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.post('/decrypt', (res, req) => { // Here I try to access the data that I passed by POST method console.log(res.body); return 'data back'; }) 

entrez la description de l'image ici

Ceci est mon code angular:

 import { Injectable, Input } from '@angular/core'; import { HttpClient, HttpResponse, HttpHeaders } from '@angular/common/http'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/do'; import { Observable } from 'rxjs/Observable'; import { saveAs } from 'file-saver/FileSaver'; @Injectable() export class DatabaseService { private API_GET_LIST_FILES = 'http://localhost:3000/files'; private API_GET_FILE = 'http://localhost:3000/download?name='; private BASE_URL = 'http://localhost:3000/'; constructor(private http: HttpClient) { } getFile(key: ssortingng) { return this.http.get(this.API_GET_FILE + key, { responseType: 'blob' }) .map(res => { return { filename: key.split('/').pop(), data: res }; }) .subscribe(res => { console.log('start download:', res); // no matter what I pass here to the decrypt function, I can't get it in nodeJS server this.decrypt(res.filename) .subscribe( next => console.log(next) ); saveAs(res.data, res.filename); }, error => { console.log('download error:', JSON.ssortingngify(error)); }, () => { console.log('Completed file download.'); }); } decrypt(res): Observable { const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/octet-stream' }) }; return this.http.post(this.BASE_URL + 'decrypt', res, httpOptions); } } 

Si je passe les ***res*** à la fonction de déchiffrement, j’obtiendrai beaucoup d’informations mais cela me semblera bizarre.

entrez la description de l'image ici entrez la description de l'image ici

Faites ce que Anand a suggéré, définissez les en-têtes sur application/json (ou sautez complètement httpOptions car c’est la valeur par défaut) et envoyez {name: res} . Corps de la demande devrait alors être juste que.

Pour le téléchargement de fichiers, vous devez utiliser un middleware Express tel que Multer ou Multiparty . Du côté angular par exemple ng2-file-upload .

La méthode de rappel de méthode express est (req, res, next) pas (res, req) , elle est déroutante lors de la lecture de votre code 🙁

Et si vous return juste d’un rappel, il sera suspendu jusqu’à ce que la requête http arrive à expiration (je pense). Vous devriez faire res.status(200).end() ou res.json({done: true}) ou quelque chose de similaire.