0

下面是我定义和硬编码的两个获取请求

他们从服务器获取数据并生成 JSON

有没有办法将这两个 get 请求合并为一个,我的意思是只用一个 get 请求即时生成 JSON ..... 它根据从客户端接收的 i?p 生成输出


我的快递程序 ::

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

var app = express();

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

connection.connect(); 

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

//
//REQUEST FOR FIRST REQUEST
//

app.get('/',function(request,response){
    var name_of_Collages, RestaurantTimings;

    async.series( [
        // Get the first table contents
        function ( callback ) {
            connection.query('SELECT * FROM restaurants', function(err, rows, fields)
                {
                        console.log('Connection result error '+err);
                        name_of_Collages = 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({
        'Collages' : name_of_Collages,
        'RestaurantTimings' : RestaurantTimings
    });
} );

} );



//
//REQUEST FOR Collage SCREEN
//


app.get('/College1',function(request,response){
    var College1, RestaurantTimings;

    async.series( [
        // Get the first table contents
        function ( callback ) {
            connection.query('SELECT * FROM College1', function(err, rows, fields)
                {
                        console.log('Connection result error '+err);
                        College1 = 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({
        'College' : College1,
        'RestaurantTimings' : RestaurantTimings
    });
} );


} );



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

[之后 - 编辑]

现在我有一个如上的快速程序 :: 它是做什么的?-> 它将 JSON 发送回客户端

我定义了两个获取请求::

案例1> ::如果我使用http:// 40.2.3.3:8213/我得到一个JSON响应,从Mysql获得的数据说table1- > table1是一个大学列表

案例2> ::如果我使用http:// 40.2.3.3:8213/College1我得到另一个JSON响应,从Mysql获得的数据说table2->表二是college1的描述

我在服务器端部署我的完整应用程序

  • 现在明天我添加一个新值到table1-> 一个新的大学名称并在 mysql 数据库中定义它
  • 接下来我也在mysql数据库中为新的college2添加一个新的数据库表

我不应该修改 express 代码来获取新的 JSON ::

  • 如果客户要求提供 College2 信息 ..... express 程序应该接受该输入并在 FLY 上生成 JSON !

希望我清楚

谢谢,

4

3 回答 3

0

您是否尝试过使用app.all而不是app.get

app.all('/:command?',function(request,response){
    var command = users[req.params.command];

然后,这应该允许您向if请求添加一些条件(设置到command变量中)以将这两个合并为一个。

于 2013-08-27T09:12:47.103 回答
0

所以基本上,如果我理解你的问题,你希望 /College1 请求的数据在第一个请求之后准备好(或者你想开始预取它)。

在第一个请求中写入并结束响应后,您始终可以触发异步函数开始计算此数据。您可以将此数据保存在缓存层(如 redis)中。在您的第二个函数中,您可以从 Redis 获取数据(如果数据尚不可用,请稍后再试)。如果您的第二个查询是密集查询并占用相当多的时间,这将有所帮助。如果不是这种情况,那么做这一切可能只会增加一点延迟。
您也可以随时在节点程序中使用对象来跟踪这一点,但不建议这样做,因为您必须开始管理内存并自己清理,这将是一件令人头疼的事情。这也意味着您的节点应用程序不会很好地扩展。

编辑:刚刚看到你的编辑。您的问题不是 Node.js 或 express 问题。如果要在系统需要输入新数据时创建新表,则需要重新考虑数据库设计。您有一个包含所有大学条目的表,其中有一个college_id 列来告诉哪些条目属于哪个大学。你应该路由像 /college/?id=1 这样的请求

于 2013-08-27T09:13:16.807 回答
0

您可以使用 get 中的查询字符串将参数传递给代码,如下所示:

domain.com?param=value&param2=value2

然后在您定义的 get 回调中,您可以使用这些参数来操作响应

要获取回调中的参数,只需使用它:

var firstParam = request.query.param;
var secondParam = request.query.param2;
于 2013-08-27T09:13:50.760 回答