0
votes

JSON vient en indéfini, où sont les données perdues?

J'utilise Postman pour tester une API de repos, je consomme pour un projet. J'essaie d'envoyer des données à une méthode postale, mais les données se perdent quelque part entre Postman et le noeud final.

J'ai essayé de tracer les données avec des journaux de console, mais rien ne sort (la qualité est indéfinie). Je suis à peu près sûr que la question n'est pas avec le point final ou le routeur, car la même erreur se pose dans Postman comme dans la console de mon IDE, ce qui signifie qu'il existe une sorte de communication. P>

// json I'm putting into postman. validated with Jsonlint.com
{
    "Name": "testN",
    "file": "file1",
    "Path": "/home/userf",
    "userName": "user1"
}

// profileWrite.js
 const dbProfileWrite = require('../...db-ProfileWrite');
 const bodyParser = require('body-parser');
 var app = express();
 app.use(bodyParser.json());

// my post method 
async function post(req, res, next) {
    try {
        console.log("attempting to parse data: " + req.body);
        let profile = req.body;
        console.log("data parsed, writing profiles");
        profile= await dbProfileWrite.writeProfile(profile);
        res.status(201).json(profile);
    } catch (err) {
        next(err);
    }
}
module.exports.post = post;


2 commentaires

Vous n'utilisez jamais la variable config pour quoi que ce soit.


corrigé, il était censé être profil


3 Réponses :


2
votes

En supposant que vous utilisiez Express Cadre, par le look de la fonction postale. Vous devez utiliser une fonction de colline pour traiter le corps de la demande avec Body-Parser . Assurez-vous d'utiliser l'analyseur correct dans ce cas

app.use(bodyParser.json())


3 commentaires

Oui j'utilise Express. Comment dois-je incorporer ce Bodyparser dans la fonction? devrait-il remplacer json.parse?


J'ai remplacé Json.Parse avec Bodyparser.json et cela a fonctionné. Merci pour l'aide


La solution n'a fait en fait pas résolu le problème, il vient de se débarrasser de la msg d'erreur. Je ne sais pas quoi d'autre me manque.



1
votes

Vous n'avez plus besoin d'un analyseur de corps, il a été remis au cœur de Express sous la forme d'express.json, utilisez simplement app.use (express.json ()) .

Pour accéder au corps de votre demande, utilisez Req.body, il devrait venir avec un objet avec les clés représentant le JSON envoyé; xxx

Voir l'express Documentation


10 commentaires

OK cool. Donc, si je veux accéder aux objets de profil, ferais-je quelque chose comme profil.name ? Si j'essaie d'imprimer tout le profil même lorsque vous utilisez votre méthodologie, cela sort toujours indéfini. Existe-t-il une méthode tostring () ?


Il ne faut pas venir non définie si vous utilisez le middleware correctement, comment postez-vous les données? Utilisez-vous l'en-tête de type de contenu correct?


Oui, j'utilise Postman et je l'ai défini sur Type d'en-tête Application / JSON.


Utilisez-vous d'autres middleware? Essayez de supprimer tout autre middleware afin que nous puissions trianguler le problème ...


Je n'ai aucune autre dépendance dans ce fichier en dehors de Express, mon routeur envoie la demande directement à cette méthode à partir du point final.


Pouvons-nous voir tout le dossier?


Essayez également de reproduire l'exemple req.body dans la documentation Express afin que nous puissions nous assurer que le problème réside.


Laissez-nous Continuez cette discussion dans le chat .


Le req.bonty Exemple utilise une méthode de structuration différente de l'API qui ne fonctionnera pas avec le mien. J'ai un fichier de routeur physique et tous alors qu'il a les itinéraires directement dans les en-têtes de la méthode. Mes méthodes autres que les différences de routage sont identiques. Je vais jouer avec elle un peu plus mais je suis totalement battu quant à ce qui ne va pas. Merci pour l'aide jusqu'à présent.


J'ai fait ce que vous avez demandé en ce qui concerne la recréation du code des documents express. Faites-moi savoir si je peux faire autre chose pour aider à résoudre ce problème.



0
votes

a résolu le problème moi-même avec une petite aide de John Schmitz. La question était que je définissais le routeur et le serveur avant de lui dire de la manière de gérer les corps / objets JSON, le corps a donc passé la par défaut non définie. Dans mon index.js , vous trouverez le code suivant: xxx

la clé à ceci est que l'application est racontée à utiliser JSON et Express .urlencodé avant que le routeur ne soit déclaré. Ces actions doivent se produire dans cet ordre et tout avant app.listen est appelé. Une fois que l'application répertorie, tous ses paramètres sont définis et que vous ne pouvez pas les modifier. TL; DR: Node est très difficile et vous devez définir ces choses au bon endroit. merci tout pour l'aide.


0 commentaires