2 votes

Express Impossible de lire les valeurs des propriétés de req.data dans la requête PUT.

J'ai écrit un service PUT simple en utilisant express. Maintenant, lorsque j'appelle le service PUT et lui passe les données, je trouve quelque chose d'étrange. Lorsque je lis les données en utilisant req.data, je peux voir les données que j'ai passées. Mais quand j'essaie d'entrer dans la propriété de req.data, j'obtiens un undefined.

Voici mon app.js

module.exports = function (data) {

    var express = require('express');
    var path = require('path');
    var routes = require('./routes/index')(data);
    var bodyParser = require('body-parser');

    var app = express();

    // all environments
    app.set('port', process.env.PORT || 3000);
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'jade');

    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(express.static(path.join(__dirname, 'public')));
    app.use(function (req, res, next) {

        res.set('X-Powered-By', 'Flight Tracker');

        next();

    });

    //CORS middleware
    app.use(function(req, res, next) {
        res.header('Access-Control-Allow-Origin', 'http://127.0.0.1:63018');
        res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
        res.header('Access-Control-Allow-Headers', 'Content-Type');

        next();
    });

    app.put('/newflight', routes.create);

    return app;

};

Voici le vol

var Flight = function () {
    this.data = {
        number: null,
        origin: null,
        destination: null,
        departs: null,
        arrives: null,
        actualDepart: null,
        actualArrive: null
    };

    this.fill = function (info) {
        for (var prop in this.data) {

            if (this.data[prop] !== 'undefined') {
                this.data[prop] = info[prop];
            }
        }
    };

    this.triggerDepart = function () {
        this.data.actualDepart = Date.now();
    };
    this.triggerArrive = function () {
        this.data.actualArrive = Date.now();
    };
    this.getInfo = function () {
        return this.data;
    };

};

//Serving as factory to create instances of Objects

module.exports = function (info) {

    var instance = new Flight();    
    instance.fill(info);    
    return instance;

}

Voici mes itinéraires

module.exports = function (data) {

        var flight = require('../flight');

        for (var number in data) {

            console.log(data[number]);
            data[number] = flight(data[number]);
        };

        var functions = {};

        functions.create = function(req,res){
            if(!req.body) { 
                return res.sendStatus(400); 
            } else{
                console.log(req.body);
                console.log(req.body.number);
                console.log(req.body.origin);
                console.log(req.body.destination);
                var number = req.body.number;            
                data[number] = flight(req.body);
                console.log(data[number]);

                res.json({
                    status:202,
                    statusText:"Entries have been created",
                    data:data
                });
            }

        };

        return functions;

    }

J'ai également le résultat de la méthode de création ci-dessus : enter image description here

Une idée de la raison pour laquelle cela se produit ?

0voto

Yameen Points 425

En fait, mes données postales étaient incorrectes. Je passais postdata.data alors que je ne devais passer que postdata. Cela a réglé le problème. J'ai également ajouté le 'Content-Type' : 'application/json' dans l'en-tête.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X