วิธีสร้างคำขอ HTTP ภายนอกด้วย Node.js [ปิด]


84

คำถามค่อนข้างง่าย ฉันต้องการใช้เซิร์ฟเวอร์ Node.js เป็นพร็อกซีเพื่อบันทึกตรวจสอบสิทธิ์และส่งต่อการสืบค้น HTTP ไปยังเซิร์ฟเวอร์ HTTP ส่วนหลัง (คำขอ PUT, GET และ DELETE)

ฉันควรใช้ห้องสมุดอะไรเพื่อจุดประสงค์นั้น กลัวหาไม่เจอ

คำตอบ:


136

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);
});

10
ฉันขอแนะนำให้เพิ่มresp.setEncoding('utf8');(หรือสิ่งที่คุณใช้การเข้ารหัส) เพื่อรับข้อมูลเป็นสตริง utf8 ถ้าฉันเข้าใจถูกไม่เช่นนั้นคุณจะได้บัฟเฟอร์อ็อบเจ็กต์และอาจมีปัญหากับอักขระแบบหลายไบต์หากอักขระแบบหลายไบต์ถูกแบ่งออกเป็นสองส่วน (เพิ่งแก้ไขปัญหาที่เกี่ยวข้องมาระยะหนึ่งแล้ว)
Touko

8
ฉันเริ่มใช้requestโมดูล npm มากขึ้นจริง ๆ
chovy

7

ฉันจะรวมโหนด http-พร็อกซี่และแสดง

node-http-proxy จะรองรับพร็อกซีภายในเว็บเซิร์ฟเวอร์ node.js ของคุณผ่านRoutingProxy(ดูตัวอย่างที่เรียกว่าคำขอพร็อกซีภายในเซิร์ฟเวอร์ http อื่น )

ภายในตรรกะเซิร์ฟเวอร์ที่กำหนดเองของคุณคุณสามารถทำการรับรองความถูกต้องโดยใช้ Express ดูตัวอย่างรับรองความถูกต้องที่นี่สำหรับตัวอย่าง

การรวมสองตัวอย่างนี้ควรให้สิ่งที่คุณต้องการ


5

คุณสามารถใช้httpโมดูลในตัวเพื่อทำhttp.request()ไฟล์.

อย่างไรก็ตามหากคุณต้องการลดความซับซ้อนของ API คุณสามารถใช้โมดูลเช่นsuperagent


3
api ที่ดีกว่ามากแน่นอน ฉันไม่โทษว่าโหนดให้เฉพาะ API ระดับต่ำ แต่การเริ่มจัดการกับข้อมูลจำนวนมากนั้นน่ารำคาญ
Laurent Bourgault-Roy

1

node-http-proxy เป็นโซลูชันที่ยอดเยี่ยมตามที่ @hross แนะนำไว้ข้างต้น หากคุณยังไม่ตายในการใช้โหนดเราใช้NGINXเพื่อทำสิ่งเดียวกัน ทำงานได้ดีกับโหนด เราใช้เป็นตัวอย่างเพื่อประมวลผลคำขอ SSL ก่อนที่จะส่งต่อไปยังโหนด นอกจากนี้ยังสามารถจัดการแคชและเส้นทางการส่งต่อ เย้!


0

คุณสามารถใช้โมดูล http node.js เพื่อทำสิ่งนั้นได้ คุณสามารถตรวจสอบเอกสารที่Node.js HTTP

คุณจะต้องส่งสตริงการสืบค้นไปยังเซิร์ฟเวอร์ HTTP อื่นด้วย คุณควรจะมีว่าในServerRequest.url

เมื่อคุณมีข้อมูลเหล่านั้นแล้วคุณสามารถส่งผ่านในเซิร์ฟเวอร์ HTTP แบ็กเอนด์และพอร์ตในตัวเลือกที่คุณจะให้ในไฟล์ http.request()

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.