2013-08-30 4 views
0

Je suis en train de passer une valeur clé et générer une réponse JSON en fonction de la clé passéeExpress pour générer JSON

Programme express

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

var app = express(); 

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

connection.connect(); 

// all environments 
app.set('port', process.env.PORT || 7004); 

app.get('/RestaurantDesc/', function (request, response, next) { 

    var keyName = request.query.Key; 
    var name_of_restaurants, RestaurantTimings; 
    async.series([ 
     // Get the first table contents 
     function (callback) { 
      connection.query('SELECT * FROM ', keyName, function (err, rows, fields) { 
       console.log('Connection result error ' + err); 
       name_of_restaurants = rows; 
       callback(); 
      }); 
     }, 
     // Get the second table contents 
     function (callback) { 
      connection.query('SELECT * FROM RestaurantTimings', function (err, rows, fields) 

      { 
       console.log('Connection result error ' + err); 
       RestaurantTimings = rows; 
       callback(); 
      }); 
     } 
    // Send the response 
    ], function (error, results) { 
     response.json({ 
      'restaurants': name_of_restaurants, 
       'RestaurantTimings': RestaurantTimings 
     }); 
    }); 
}); 

app.get('/RestaurantDesc/', function (request, response, next) { 

    var keyName = request.query.Key; 
    var name_of_restaurants, RestaurantTimings; 
    async.series([ 
    // Get the first table contents 
    function (callback) { 
     connection.query('SELECT * FROM ', keyName, function (err, rows, fields) { 
      console.log('Connection result error ' + err); 
      name_of_restaurants = rows; 
      callback(); 
     }); 
    }, 
    // Get the second table contents 
    function (callback) { 
     connection.query('SELECT * FROM RestaurantTimings', function (err, rows, fields) 

     { 
      console.log('Connection result error ' + err); 
      RestaurantTimings = rows; 
      callback(); 
     }); 
    } 

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

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

Test Run ::

Je reçois la réponse JSON pour RestaurantTimings mais pas la première où keyvalue est passé, h Comment résoudre ce problème?

enter image description here

+1

En supposant que vous utilisez [node-mysql] (https://github.com/felixge/node-mysql) jetez un oeil à: [Echapper aux valeurs de requête] (https://github.com/felixge/node- mysql # escaping-query-values) – dc5

+0

Cela aide! .... mais si vous modifiez à froid la partie de la requête dans mon code comme réponses ... cette compréhension pratique m'aidera beaucoup ... Je suis un débutant à ce genre de choses! –

Répondre

0

Vous avez deux gestionnaires pour le chemin /RestaurantDesc/ - une seule Devrait être gardé.

Dans votre requête, la syntaxe est incorrecte.

En supposant que vous avez une table qui ressemble à ceci (changer ces noms pour correspondre à votre schéma):

Table Name: Restaurant 
    column:  name 

et que vous utilisez node-mysql, Changer votre requête à quelque chose comme ceci:

connection.query('SELECT * FROM Restaurant where name = ?', [keyName], function (err, rows, fields) { 
    console.log('Connection result error ' + err); 
    name_of_restaurants = rows; 
    callback(); 
}); 

Le? est un espace réservé pour les valeurs passées dans le tableau de valeurs passées dans le deuxième paramètre à query.

Voir: Escaping query values pour plus d'informations sur comment cela fonctionne. Réponse courte cependant est que les valeurs seront échappées correctement en utilisant cette approche.

+0

Merci! ... C'était exactement ce que je cherchais! ..... et aussi j'ai besoin de repenser à ma conception de la base de données ... Au départ, j'avais tort! ... J'ai beaucoup appris de ta réponse –

0

Le chemin qui fait ce que vous voulez est /, pas /RestaurantDesc/. Regardez le premier paramètre à app.get().

Voici ce que j'obtenir avec http://54.218.73.244:7004/

{ 
    "restaurants": [ 
    { 
     "restaurantID": 1, 
     "restaurantNAME": "CopperChimney", 
     "url": "http://54.218.73.244:7002/CopperChimney" 
    }, 
    { 
     "restaurantID": 2, 
     "restaurantNAME": "Aroy", 
     "url": "http://54.218.73.244:7002/Aroy" 
    }, 
    { 
     "restaurantID": 3, 
     "restaurantNAME": "MarkBoulevard", 
     "url": "http://54.218.73.244:7002/MarkBoulevard" 
    }, 
    { 
     "restaurantID": 4, 
     "restaurantNAME": "Indian", 
     "url": "http://54.218.73.244:7002/Indian" 
    } 
    ], 
    "RestaurantTimings": [ 
    { 
     "_id": 1, 
     "RestaurantTime": "8pm to 11pm" 
    }, 
    { 
     "_id": 2, 
     "RestaurantTime": "10pm to 12pm" 
    }, 
    { 
     "_id": 3, 
     "RestaurantTime": "11pm to 9pm" 
    }, 
    { 
     "_id": 4, 
     "RestaurantTime": "10pm to 5pm" 
    } 
    ] 
} 
+0

Je me réfère à app.get ('/ RestaurantDesc /' ..... s'il vous plaît vérifier le scénario de test dans le pitchire j'ai posté .... passant keyname à la requête est où je suis coincé –

+0

Il * travaille * pour vous dans '/', non? Il suffit d'utiliser tout ce qui est là ou je ne reçois pas votre problème peut-être? –

+0

pas dans '/'. Dans '/' cela fonctionne comme vous l'avez dit ... Je fais référence à '/ RestaurantDesc /' où je passe keyvalue à sql query .... Im un débutant à cette programmation –

Questions connexes