0

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

我需要一些关于服务器端的信息,主要是,据我所知,

  • ExpressJS可以执行 PHP 的所有功能 - - 是真的吗?
  • 我的客户端(Android)已准备好向服务器提交 POST 请求
  • 如果我可以以 的形式发送一个信息,(Key,value) pairExpress 是否可以接受该对 - 基于键识别值,并sql query根据从 android 客户端接收到的值执行到数据库?

如果可以,它是如何做到的?

我的快递程序(它给出了一个没有上面解释的场景的响应 - 如何修改这个程序)

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

希望我清楚 谢谢

4

1 回答 1

0

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

req.query.keyName;

如果您想将值作为 url 的一部分发送,则必须添加一个路由来接受它。您可以使用:keyName表单接受 url 中的可变内容。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,但我确信有某种方法可以使用参数化查询。希望这更有帮助。

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

于 2013-08-28T12:50:59.427 回答