2016-04-13 29 views
0

Ben aşağıda yol-api eşleştirmesini içeren bir dizi vardır: bir istek hizmetine yapıldığındaNodejs dizisi

var apiArray = [ 
    { 
    "api" : "login", 
    "path" : "/auth/login", 
    "method" : "POST" 
    }, 
    { 
    "api" : "logout", 
    "path" : "/auth/logout/{sessionId}", 
    "method" : "POST" 
    }, 
    { 
    "api" : "getAsset", 
    "path" : "/asset/{Id}", 
    "method" : "GET" 
    }, 
    { 
    "api" : "getAssetScheme", 
    "path" : "/asset/Scheme/{Id}", 
    "method" : "GET" 
    } 
]; 

i yolu özelliğine http isteğinde içinde url eşleşmesi gerekir Hangi api çağrıldığını öğrenmek için yukarıdaki dizi. yol veya sorgu parametresi olmayan basit bir api için

gibi bir şey, bu mantık iyi çalışır. Ancak, o durumlar için başarısız olur: 0:
1. path parametresine sahip apis: ex: çıkış, bir yol parametresine sahip getAsset (sırasıyla, sessionId ve Id). Bu durumda,

reqPath = "/ auth/logout/55ffc09e56eb79c737c7aac6". Sorgu parametreleri ile

2. apis: Burada

reqPath = "?/ağaç/getTree/subTree = true & & type = düğüm".

Sorgu ve yol parametreleriyle birlikte apis'i desteklemek için 'getApiName' işlevimi nasıl değiştirebilirim? Benim dizisi
api 1 aşağıdaki gibi girdileri sahip olduğunda yani:

Ayrıca ben bir API yolu diğerinin alt dize olan bir senaryo desteklemek gerekebilir yolu = "/ varlık /"
api 2: yol = "/ assset/düzeni /"

+0

kodunuzu düzenleyin.okunabilirlik için 4 boşluk ile eşleştirin veya kodu vurgulayın ve {} düğmesine basın textedit araç çubuğuna basın – jmugz3

+0

URL'yi işlemek için express modülünü kullanabilirsiniz. –

+0

apiArray []? –

cevap

0

İlk Durum 1 npm install --save lodash

: Eğer yol tuşu apiArray [] örneğin tüm nesneler için normal ifadeyi yolu için aksi düzenlemek yol anahtarını containg yeni bir anahtar eklemek düzenleyemezsiniz eğer:

"path" : new RegExp("/auth/logout/*";

Ardından eşleşen nesneyi hızlıca bulmak için lodash kütüphanesini kullanın;

var _ = require('lodash'); 
var apiArray = [ 
    { 
     "api": "login", 
     "path": new RegExp("/auth/login"), 
     "method": "POST" 
    }, 
    { 
     "api": "logout", 
     "path": new RegExp("/auth/logout/*"), 
     "method": "POST" 
    }, 
    { 
     "api": "getAsset", 
     "path": new RegExp("/asset/*"), 
     "method": "GET" 
    }, 
    { 
     "api": "getAssetScheme", 
     "path": new RegExp("/asset/Scheme/*"), 
     "method": "GET" 
    } 
]; 
var url = '/asset/frew' 
var api = _.find(apiArray, function(item){ 
    return item.path.test(url); 
}); 
console.log(api); 

Bu api

vaka 2 extrat yapabileceğiniz eşleşen yolunu içeren nesneyi döndürür: '?'

Bölünmüş de reqPath ve yukarıdaki Bul işlevini yukarıdaki Bulundur

const reqPath ="/tree/getTree/?subTree=true&&type=node"; 
const url = reqPath.split('?')[0]; 
+0

Teşekkürler, çözüm benim için çalışıyor –

+0

@KavyaMugali Lodash kütüphanesini kullanmaya başla. Kodlamayı çok kolaylaştıran birçok işlevi vardır. http://www.lodash.com –

0
if(apiArray[i].path=== reqPath). 

(yol, sorgu değiştiği belirlendi gibi) tüm vakalar için dize karşılaştırma, böylece alışkanlık işi yapıyoruz.

Yani benim önerim BASE URL karşılaştırmak:

baseurl alışkanlık böylece değiştirmek için, dize karşılaştırma yapabilirsiniz.

( )

Express? Kullanıyor musunuz? Eğer evet ise, ekspres modülü kullanarak işlem yapın.

+0

Api belgelerimden (swagger, örn. Path = "/ auth/logout/{sessionId}" tarafından tanınan) yolunu alıyorum. Bundan nasıl temel url alabilirim? Ayrıca, evet ekspres kullanıyorum. Bu durumu nasıl ifade edebilirim? –

+0

@KavyaMugali ifadesinde, yukarıdaki rotayı doğru uygulamış mıyım? Eğer evet ise, o zaman çağrılan rotanın req.url dosyasını yazdırın. – Subburaj