यह समस्या वही है जो यहां लॉग की गई थी:https://github.com /vitaly-t/pg-promise/issues/442
मूल रूप से, pg-promise क्वेरी स्वरूपण इंजन आपके स्वरूपण मापदंडों के अनुसार SQL उत्पन्न करता है। यह आपके परिणामी SQL पर कोई सिंटैक्स सत्यापन नहीं करता है।
आप IN ()
जनरेट कर रहे हैं , जो अमान्य SQL है, इसलिए आपको त्रुटि मिलती है।
आपको वेरिएबल की उपस्थिति की जांच करनी चाहिए, और वेरिएबल के गायब होने पर ऐसी कोई क्वेरी उत्पन्न करने का प्रयास भी नहीं करना चाहिए, क्योंकि तब आपकी क्वेरी कुछ भी अच्छा नहीं कर पाएगी।
उदाहरण:
router.get('/search', (req, res, next) => {
const variables = ['variable_a', 'variable_b', 'variable_c'];
const conditions = variables.filter(v => v in req.query)
.map(v => pgp.as.format('$1:name IN ($2:csv)', [v, req.query[v]]))
.join(' AND ');
conditions = conditions && 'WHERE ' + conditions;
db.any('SELECT * FROM food $1:raw', conditions)
.then(result => res.send(result))
.catch(error => {/* handle the error */});
});
अन्य समाधान भी हो सकते हैं, जैसे pg-promise बहुत सामान्य है, यह आपके इस दृष्टिकोण को सीमित नहीं करता है।
उदाहरण के लिए, इसके बजाय:
v => pgp.as.format('$1:name IN ($2:csv)', [v, req.query[v]])
आप यह कर सकते हैं:
v => pgp.as.name(v) + ' IN (' + pgp.as.csv(req.query[v]) + ')';
जो एक ही परिणाम देगा। जो आपको पसंद हो!;)