下面是我已经定义并硬编码的两个获取请求
他们从服务器获取数据并产生结果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发送回客户端
我定义了两个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中定义它我不应该修改快速代码来获取新的JSON ::
希望我很清楚
谢谢,
答案 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¶m2=value2
然后在你定义的get回调中,你可以使用这些参数来操作响应
获取回调中的参数只需使用:
var firstParam = request.query.param;
var secondParam = request.query.param2;