2015-11-09 17 views
20

से एचटीएमएल रिटर्न एचटीएमएल this post जैसा ही हासिल करने की कोशिश कर रहा हूं, लेकिन मुझे वहां जवाब नहीं समझ रहा है और टिप्पणियों में स्पष्टीकरण मांगने की अनुमति नहीं है।एडब्ल्यूएस एपीआई गेटवे

मैं एक API गेटवे endpoint कि, GET अनुरोध स्वीकार करता है लैम्ब्डा समारोह (पायथन में लागू) के लिए कुछ अनुरोध चर से होकर गुजरता है, और (के रूप में वर्णित here

के रूप में एक खाली रिस्पांस मॉडल के माध्यम से पाठ/html देता है पहले तो सवाल में वर्णित है, लैम्ब्डा समारोह एक HTML स्ट्रिंग रिटर्न और एपीआई endpoint डिफ़ॉल्ट आउटपुट पासथ्रू व्यवहार @ एकता रिस्पांस उपयोग करता है, HTML आउटपुट उद्धृत किया गया है:

"\n<html>\n<body>\n ... \n</body>\n</html>\n" 

कि इस सवाल का जवाब (@ARUNBALAN NV) के द्वारा कहते हैं "बस एक चर में HTML मार्कअप स्टोर करें और इसे वापस करें।" , लेकिन मुझे यकीन नहीं है कि इसका मतलब लैम्ब्डा फ़ंक्शन के संदर्भ में क्या है। क्या इसका मतलब "वैरिएबल HTML" नामक तत्व के साथ "एप्लिकेशन/जेसन" प्रतिक्रिया वापस करना है? कुछ इस तरह?

"{\"variableHTML\": \"\\n<html>\\n<body>\\n ... \\n</body>\\n</html>\\n\"}" 

मैं सेट है कि एपीआई गेटवे में & मेरी एकता रिस्पांस अब (200 आवेदन/json प्रतिक्रिया के लिए) तत्व को निकालने के लिए एक मानचित्रण का उपयोग करता सुझाव बिल्कुल के रूप में:

#set($inputRoot = $input.path('$')) 
$inputRoot.variableHTML . 

परिणाम अब एक है एक बिंदु वापस लौटाया जा रहा है।

मैंने कई बदलावों ($ इनपुट.path के बजाय $ input.json, विभिन्न चरणों में विभिन्न सामग्री प्रकार इत्यादि) की कोशिश की है, लेकिन लगता है कि उपरोक्त सेटअप अन्य धागे से स्वीकार्य उत्तर से सबसे नज़दीकी से मेल खाता है।

कोई अंतर्दृष्टि जहां मैं इसके साथ गलत हो रहा हूं, की सराहना की जाएगी। पढ़ने के लिए धन्यवाद!

उत्तर

38

आप बहुत करीब हैं। इसे समझने की कुंजी यह महसूस कर रही है कि जो भी पायथन ऑब्जेक्ट आप लौटते हैं उसे जेएसओएन को क्रमबद्ध किया जाएगा। इसलिए, यदि आप एक स्ट्रिंग वापस करते हैं, तो इसे उद्धृत किया जाएगा और एक मान्य JSON ऑब्जेक्ट से बच निकला होगा। आप इस स्ट्रिंग का मूल्य चाहते हैं, तो निम्न एकता प्रतिक्रिया मानचित्रण का उपयोग करें:

#set($inputRoot = $input.path('$')) 
$inputRoot 

#set लाइन $inputRoot देता पूरे JSON का मूल्य वस्तु अपने अजगर कार्यक्रम लौटे ... जो सिर्फ मूल स्ट्रिंग आप है लैम्ब्डा ढांचे के सामने इसे वापस जेएसओएन में परिवर्तित कर दिया गया।

मान लीजिए कि आप अपने कार्यक्रम के बजाय मैपिंग में प्रतिक्रिया बनाना चाहते हैं। फिर, एक अजगर स्ट्रिंग लौटने के बजाय, आप एक अजगर वस्तु लौट सकता है, इसलिए जैसे:

return {"title": "Greeting", "message": "Hello"} 

आपका मानचित्रण एचटीएमएल है कि परिवर्तित कर सकते हैं तो जैसे:

#set($inputRoot = $input.path('$')) 
<html><head><title>$inputRoot.title</title></head> 
<body>$inputRoot.message</body></html> 

एक मानचित्रण कि जिस तरह से अधिक है का उपयोग करना उपयोगी है अगर आप सरल HTML की तुलना में संरचित डेटा लौट रहे हैं, हालांकि। मैं आपकी समस्या के लिए उपरोक्त पहले मैपिंग का उपयोग करूंगा।

+0

धन्यवाद, चार्ल्स! अच्छी तरह से काम। –

+1

यह मेरे लिए काम किया। संदर्भ के लिए, मैंने मैपिंग टेम्पलेट सामग्री प्रकार के रूप में 'टेक्स्ट/एचटीएमएल' का उपयोग किया और अंतिम एचटीएमएल कोड ब्लॉक बहुत अच्छा काम किया। –

+1

नीले बटन पर क्लिक करना और एपीआई तैनाती मत भूलना !! – scottndecker

3

जब एक्सप्रेस का उपयोग करते हुए, तो आप सिर्फ हैडर अनुप्रयोग में की तरह सेट कर सकते हैं:

res.set('Content-Type', 'text/html');

जब aws-serverless-express या इसी तरह का उपयोग कर, उन हेडर प्रचारित किया जाना चाहिए।

संबंधित मुद्दे