คำถามค่อนข้างง่าย ฉันต้องการใช้เซิร์ฟเวอร์ Node.js เป็นพร็อกซีเพื่อบันทึกตรวจสอบสิทธิ์และส่งต่อการสืบค้น HTTP ไปยังเซิร์ฟเวอร์ HTTP ส่วนหลัง (คำขอ PUT, GET และ DELETE)
ฉันควรใช้ห้องสมุดอะไรเพื่อจุดประสงค์นั้น กลัวหาไม่เจอ
คำถามค่อนข้างง่าย ฉันต้องการใช้เซิร์ฟเวอร์ Node.js เป็นพร็อกซีเพื่อบันทึกตรวจสอบสิทธิ์และส่งต่อการสืบค้น HTTP ไปยังเซิร์ฟเวอร์ HTTP ส่วนหลัง (คำขอ PUT, GET และ DELETE)
ฉันควรใช้ห้องสมุดอะไรเพื่อจุดประสงค์นั้น กลัวหาไม่เจอ
คำตอบ:
NodeJS รองรับ http.request เป็นโมดูลมาตรฐาน: http://nodejs.org/docs/v0.4.11/api/http.html#http.request
var http = require('http');
var options = {
host: 'example.com',
port: 80,
path: '/foo.html'
};
http.get(options, function(resp){
resp.on('data', function(chunk){
//do something with chunk
});
}).on("error", function(e){
console.log("Got error: " + e.message);
});
requestโมดูล npm มากขึ้นจริง ๆ
ฉันจะรวมโหนด http-พร็อกซี่และแสดง
node-http-proxy จะรองรับพร็อกซีภายในเว็บเซิร์ฟเวอร์ node.js ของคุณผ่านRoutingProxy(ดูตัวอย่างที่เรียกว่าคำขอพร็อกซีภายในเซิร์ฟเวอร์ http อื่น )
ภายในตรรกะเซิร์ฟเวอร์ที่กำหนดเองของคุณคุณสามารถทำการรับรองความถูกต้องโดยใช้ Express ดูตัวอย่างรับรองความถูกต้องที่นี่สำหรับตัวอย่าง
การรวมสองตัวอย่างนี้ควรให้สิ่งที่คุณต้องการ
คุณสามารถใช้httpโมดูลในตัวเพื่อทำhttp.request()ไฟล์.
อย่างไรก็ตามหากคุณต้องการลดความซับซ้อนของ API คุณสามารถใช้โมดูลเช่นsuperagent
node-http-proxy เป็นโซลูชันที่ยอดเยี่ยมตามที่ @hross แนะนำไว้ข้างต้น หากคุณยังไม่ตายในการใช้โหนดเราใช้NGINXเพื่อทำสิ่งเดียวกัน ทำงานได้ดีกับโหนด เราใช้เป็นตัวอย่างเพื่อประมวลผลคำขอ SSL ก่อนที่จะส่งต่อไปยังโหนด นอกจากนี้ยังสามารถจัดการแคชและเส้นทางการส่งต่อ เย้!
คุณสามารถใช้โมดูล http node.js เพื่อทำสิ่งนั้นได้ คุณสามารถตรวจสอบเอกสารที่Node.js HTTP
คุณจะต้องส่งสตริงการสืบค้นไปยังเซิร์ฟเวอร์ HTTP อื่นด้วย คุณควรจะมีว่าในServerRequest.url
เมื่อคุณมีข้อมูลเหล่านั้นแล้วคุณสามารถส่งผ่านในเซิร์ฟเวอร์ HTTP แบ็กเอนด์และพอร์ตในตัวเลือกที่คุณจะให้ในไฟล์ http.request()
resp.setEncoding('utf8');(หรือสิ่งที่คุณใช้การเข้ารหัส) เพื่อรับข้อมูลเป็นสตริง utf8 ถ้าฉันเข้าใจถูกไม่เช่นนั้นคุณจะได้บัฟเฟอร์อ็อบเจ็กต์และอาจมีปัญหากับอักขระแบบหลายไบต์หากอักขระแบบหลายไบต์ถูกแบ่งออกเป็นสองส่วน (เพิ่งแก้ไขปัญหาที่เกี่ยวข้องมาระยะหนึ่งแล้ว)