在服务器中执行以执行数据库查询

时间:2013-08-28 12:20:55

标签: node.js express

我想知道ExpressJS如何在服务器端工作

我需要有关服务器端的一些信息,根据我的知识,主要内容是

  • ExpressJS可以执行PHP的所有功能主义者 - 是 - 它 是吗?
  • 我的客户端(Android)已准备好向服务器提交POST请求
  • 如果我能以(Key,value) pair的形式发送一条信息, Express可以接受该对 - 根据密钥识别值 并根据收到的值对数据库执行sql query 来自android客户端?

如果可以的话呢?

MY Express程序(它提供了一个没有上述情况的响应 - 如何修改此程序)

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: 'DB'
});

connection.connect(); 

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

app.get('/',function(request,response){
    var name_of_restaurants, 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_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'));
});

希望我很清楚 谢谢

1 个答案:

答案 0 :(得分:0)

您可以通过查询参数或作为网址路径的一部分发送信息。如果您将其作为查询参数发送,则可以使用

进行访问
req.query.keyName;

如果您想将该值作为网址的一部分发送,则您必须添加一个接受该路由的路由。您可以使用:keyName表单接受网址中的可变内容。 Express将在req.params中捕获它。所以它看起来有点像这样:

app.get('/some/url/:keyName', function(req, res, next){
    var keyName = req.params.keyName;
    // . . .
});

然后,您可以将您的http请求发送到' / some / url / someKeyValue'变量keyName将等于你在/ some / url /.

之后添加的任何内容

如果您在请求正文中发布数据,请使用req.body.keyName访问该数据。

编辑:这是尝试使用原始代码。请注意,我仍在编造价值并猜测其意图是什么。

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: 'DB'
});

connection.connect(); 

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

//
//REQUEST FOR FIRST REQUEST
//

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

    async.series( [
        // Get the first table contents
        function ( callback ) {
            connection.query('SELECT * FROM restaurants WHERE name = ' . request.body.name, 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'));
});

但是你不应该因为SQL注入而直接查询。我从未在节点上使用MySQL,但我确定有一些方法可以使用参数化查询。希望这更有帮助。

此外,我假设数据将在请求正文中传递,因为您说您已准备好POST到服务器。