在服务器中使用Express和GET请求

时间:2013-08-27 08:59:27

标签: node.js express

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

他们从服务器获取数据并产生结果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'));
});

[AFTER - EDIT]

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

我定义了两个get requests ::

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

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

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

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

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

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

希望我很清楚

谢谢,

3 个答案:

答案 0 :(得分:0)

您是否尝试过使用app.all代替app.get

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

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

答案 1 :(得分:0)

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

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

编辑:刚看到你的编辑。您的问题不是Node.js或表达问题。如果要在系统中输入新数据时创建新表,则需要重新考虑数据库设计。你有一张桌子,里面有所有大学入学名单,有一个college_id专栏,告诉你哪些学生属于哪所大学。你应该像/ college /?id = 1

那样路由请求

答案 2 :(得分:0)

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

domain.com?param=value&param2=value2

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

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

var firstParam = request.query.param;
var secondParam = request.query.param2;
相关问题