web-dev-qa-db-fra.com

Comment puis-je répondre en XML à l'aide d'ExpressJS?

J'ai un code simple qui donne une réponse JSON pour un itinéraire spécifique. Voici mon code actuel:

var express = require('express')
  , async = require('async')
  , http = require('http')
  , mysql = require('mysql');

var app = express();

var connection = mysql.createConnection({
    Host: 'localhost',
    user: '****',
    password: "****",
    database: 'restaurants'
});

connection.connect();

// all environments
app.set('port', process.env.PORT || 1235);
app.use(express.static(__dirname + '/public/images'));


app.get('/DescriptionSortedRating/',function(request,response){
    var name_of_restaurants;

    async.series( [
        // Get the first table contents
        function ( callback ) {
            connection.query('SELECT * FROM restaurants ORDER BY restaurantRATING', function(err, rows, fields)
                {
                        console.log('Connection result error '+err);
                        name_of_restaurants = rows;
                        callback();
                });

 }
   // Send the response
], function ( error, results ) {
    response.json({
        'restaurants' : name_of_restaurants
    });
} );

} );



http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

Comment puis-je faire une réponse XML équivalente au JSON ci-dessus?

24
Devrath

Vous pouvez utiliser n'importe quel nombre de bibliothèques XML disponibles sur npm. Voici un exemple utilisant la bibliothèque simplement nommée " xml ":

var xml = require('xml');

response.set('Content-Type', 'text/xml');
response.send(xml(name_of_restaurants));

Voir la documentation du module pour une description de la façon dont il convertit les objets JavaScript en XML. Si vous avez besoin que les choses soient retournées dans un format XML spécifique, vous aurez bien sûr plus de travail à faire.

39
Ethan Brown

En tant que mise à jour, il semble que res.type devrait être utilisé à la place car res.set ne donne pas les mêmes résultats.

res.type('application/xml');

Plus d'informations peuvent être trouvées dans la référence API .

7
Christopher Dyke