node.js - شرح - request object in node js




كيفية الحصول على المتغيرات GET(سلسلة الاستعلام) في Express.js على Node.js؟ (10)

هل يمكننا الحصول على المتغيرات في سلسلة الاستعلام في Node.js مثلما نحصل عليها في $_GET في PHP؟

أعلم أنه في Node.js يمكننا الحصول على عنوان URL في الطلب. هل هناك طريقة للحصول على معلمات سلسلة الاستعلام؟


إذا كنت تستخدم ES6 و Express ، فجرّب هذا الأسلوب:

const express = require('express');
const app = express();

app.get('/', function(req, res){
   const {id, since, fields, anotherField}  = req.query;
});

app.listen(3000);

انها بسيطة جدا:

مثال عنوان URL:

http://.com:3000/activate_accountid=3&activatekey=$2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjzfUrqLrgS3zXJVfVRK

يمكنك طباعة جميع قيم سلسلة الاستعلام باستخدام:

console.log("All query strings: " + JSON.stringify(req.query));

انتاج |

كل سلاسل الاستعلام: {"id": "3"، "activatekey": "$ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjz fUrqLrgS3zXJVfVRK"}

لطباعة محددة:

console.log("activatekey: " + req.query.activatekey);

انتاج |

activatekey: $ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjzfUrqLrgS3zXJVfVRK


تعلمت من الإجابات الأخرى وقررت استخدام هذا الرمز في موقعي:

var query = require('url').parse(req.url,true).query;

ثم يمكنك الاتصال

var id = query.id;
var option = query.option;

حيث يجب أن يكون عنوان URL

/path/filename?id=123&option=456

خادم Node.js HTTP صغير يستمع على المنفذ 9080 ، تحليل بيانات GET أو POST وإرسالها مرة أخرى إلى العميل كجزء من الاستجابة هو:

var sys = require('sys'),
url = require('url'),
http = require('http'),
qs = require('querystring');

var server = http.createServer(

    function (request, response) {

        if (request.method == 'POST') {
                var body = '';
                request.on('data', function (data) {
                    body += data;
                });
                request.on('end',function() {

                    var POST =  qs.parse(body);
                    //console.log(POST);
                    response.writeHead( 200 );
                    response.write( JSON.stringify( POST ) );
                    response.end();
                });
        }
        else if(request.method == 'GET') {

            var url_parts = url.parse(request.url,true);
            //console.log(url_parts.query);
            response.writeHead( 200 );
            response.write( JSON.stringify( url_parts.query ) );
            response.end();
        }
    }
);

server.listen(9080);

احفظه كـ parse.js ، وقم بتشغيله على وحدة التحكم عن طريق إدخال "عقدة parse.js".


في Express ، استخدم req.query .

req.params فقط يحصل على معلمات المسار ، وليس معلمات سلسلة الاستعلام. راجع وثائق express أو sails :

(req.params) التحقق من المسارات params ، مثال: / user /: id

(req.query) يتحقق من params string query ، مثل:؟ id = 12 Checks urlencoded body params

(req.body) ، مثل: id = 12 لاستخدام جُمل طلب urlencoded ، يجب أن يكون req.body كائنًا. يمكن القيام بذلك عن طريق استخدام الوسيطة _express.bodyParser.

ومع ذلك ، في معظم الأحيان ، تريد الحصول على قيمة معلمة بغض النظر عن مصدرها. في هذه الحالة ، استخدم req.param('foo') .

سيتم إرجاع قيمة المعلمة سواء كان المتغير في معلمات المسار أو سلسلة الاستعلام أو نص طلب الترميز.

ملاحظة جانبية - إذا كنت تهدف إلى الحصول على تقاطع بين جميع أنواع معلمات الطلب الثلاثة (على غرار PHP's $_REQUEST ) ، فأنت تحتاج فقط إلى دمج المعلمات معًا - إليك الطريقة التي أعددتها في Sails . ضع في اعتبارك أن كائن معلمات المسار / المسار ( req.params ) له خصائص صفيف ، لذا يهم الأمر (على الرغم من أن هذا قد يتغير في Express 4 )


نظرًا لأنك قد ذكرت Express.js في علاماتك ، فإليك إجابة خاصة بـ Express: استخدم req.query . على سبيل المثال

var express = require('express');
var app = express();

app.get('/', function(req, res){
  res.send('id: ' + req.query.id);
});

app.listen(3000);

هناك طريقتان لتمرير المعلمات عبر طريقة GET

الطريقة 1: نهج MVC حيث يمكنك تمرير المعلمات مثل / routename /: paramname
في هذه الحالة ، يمكنك استخدام req.params.paramname للحصول على قيمة المعلمة For Example راجع التعليمات البرمجية أدناه حيث أتوقع معرف كـ param
يمكن أن يكون الرابط مثل: http://myhost.com/items/23

var express = require('express');
var app = express();
app.get("items/:id",function(req,res){
var id = req.params.id;
//further operations to perform
});
app.listen(3000);

الطريقة 2: نهج عام: تمرير المتغيرات كسلسلة استعلام باستخدام '؟ المشغل أو العامل
على سبيل المثال ، راجع التعليمات البرمجية أدناه حيث أتوقع معرف كمعلمة طلب بحث
يمكن أن يكون الرابط مثل: http://myhost.com/items?id=23

var express = require('express');
var app = express();
app.get("/items",function(req,res){
    var id = req.query.id;
    //further operations to perform
});
app.listen(3000);

يجب أن تكون قادرًا على القيام بشيء كهذا:

var http = require('http');
var url  = require('url');

http.createServer(function(req,res){
    var url_parts = url.parse(req.url, true);
    var query = url_parts.query;

    console.log(query); //{Object}

    res.end("End")
})

يمكنك استخدامه مع التعبير عن ^ 4.15.4:

var express = require('express'),
    router = express.Router();
outer.get('/', function (req, res, next) {
    console.log(req.query);
});

نأمل أن يساعد ذلك ...


تحديث 4 مايو 2014

الإجابة القديمة محفوظة هنا: https://gist.github.com/stefek99/b10ed037d2a4a323d638

1) تثبيت صريح: npm install express

app.js

var express = require('express');
var app = express();

app.get('/endpoint', function(request, response) {
    var id = request.query.id;
    response.end("I have received the ID: " + id);
});

app.listen(3000);
console.log("node express app started at http://localhost:3000");

2) تشغيل التطبيق: node app.js

3) زيارة في المتصفح: http://localhost:3000/endpoint?id=something

لقد استلمت المعرف: شيء ما

(تغيرت أشياء كثيرة منذ جوابي وأعتقد أن الأمر يستحق الحفاظ على تحديث الأمور)





express