Apache และ Node.js บนเซิร์ฟเวอร์เดียวกัน


352

ฉันต้องการใช้โหนดเพราะมันรวดเร็วใช้ภาษาเดียวกับที่ฉันใช้กับฝั่งไคลเอ็นต์และไม่ได้บล็อกโดยคำจำกัดความ แต่คนที่ฉันจ้างเขียนโปรแกรมสำหรับจัดการไฟล์ (บันทึก, แก้ไข, เปลี่ยนชื่อ, ดาวน์โหลด, อัพโหลดไฟล์ ฯลฯ ) เขาต้องการใช้ apache ดังนั้นฉันต้อง:

  1. โน้มน้าวให้เขาใช้โหนด (เขายอมแพ้ในเรื่องเล็ก ๆ น้อย ๆ )

  2. กำหนดวิธีการอัปโหลดดาวน์โหลดเปลี่ยนชื่อบันทึก ฯลฯ ไฟล์ในโหนดหรือ

  3. ฉันต้องติดตั้ง apache และ node บนเซิร์ฟเวอร์เดียวกัน

สถานการณ์ใดเป็นที่นิยมมากที่สุดและฉันจะใช้สิ่งนั้นได้อย่างไร

คำตอบ:


704

เป็นคำถามที่ดีมาก!

มีเว็บไซต์จำนวนมากและเว็บแอปฟรีที่ใช้ใน PHP ที่ทำงานบน Apache ผู้คนจำนวนมากใช้มันเพื่อให้คุณสามารถคลี่คลายสิ่งที่ค่อนข้างง่ายและนอกจากนี้ยังเป็นวิธีที่ไม่ต้องคิดค่าใช้จ่ายในการรับชมเนื้อหาแบบคงที่ โหนดรวดเร็วมีประสิทธิภาพสง่างามและเป็นเครื่องมือที่เซ็กซี่ด้วยพลังดิบของ V8 และสแต็กแบนที่ไม่มีการพึ่งพาในตัว

ฉันยังต้องการความสะดวก / ความยืดหยุ่นของ Apache และยังทำเสียงฮึดฮัดและความสง่างามของ Node.js, ทำไมไม่สามารถมีทั้ง ?

โชคดีที่คำสั่งProxyPassใน Apache httpd.confนั้นไม่ยากเกินไปที่จะไพพ์คำขอทั้งหมดใน URL เฉพาะไปยังแอปพลิเคชัน Node.JS ของคุณ

ProxyPass /node http://localhost:8000

นอกจากนี้ตรวจสอบให้แน่ใจว่าบรรทัดต่อไปนี้ไม่ได้ถูกใส่ความคิดเห็นเพื่อให้คุณได้รับพร็อกซีที่ถูกต้องและส่งต่อเพื่อเปลี่ยนเส้นทางการร้องขอ http:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

จากนั้นรันแอป Node ของคุณที่พอร์ต 8000!

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Apache!\n');
}).listen(8000, '127.0.0.1');

จากนั้นคุณสามารถเข้าถึงตรรกะ Node.JS ทั้งหมดโดยใช้/node/พา ธ บน url ของคุณส่วนที่เหลือของเว็บไซต์สามารถเหลือให้ Apache เพื่อโฮสต์หน้า PHP ที่มีอยู่ของคุณ:

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้สิ่งเดียวที่เหลือคือการโน้มน้าวให้ บริษัท โฮสติ้งของคุณปล่อยให้คุณรันด้วยการกำหนดค่านี้ !!!


6
นี่เป็นคำตอบที่ยอดเยี่ยมเพียงแค่ต้องการเพิ่มลิงค์ที่มีข้อมูลเพิ่มเติมเกี่ยวกับ proxy Pass ที่ฉันใช้ในการทำงานนี้ ตรวจสอบความคิดเห็นเช่นกัน boriskuzmanovic.wordpress.com/2006/10/20/…
Alex Muro

11
ฉันทดสอบการวาง "ProxyPass / 127.0.0.1:8000 " ภายในคอนเทนเนอร์โฮสต์เสมือนและสามารถเปลี่ยนเส้นทางกลุ่มโดเมนทั้งหมดไปยังอินสแตนซ์ของโหนดได้สำเร็จ ฉันทดสอบด้วย "time wget ... " เพื่อเปรียบเทียบความเร็วในการเข้าถึงโหนดโดยตรงกับการเข้าถึงผ่าน Apache ในการทดลอง 30 คู่ความแตกต่างเฉลี่ยอยู่ที่ประมาณ 0.56ms ความเร็วในการโหลดต่ำสุดคือ 120ms สำหรับทั้งโดยตรงและผ่าน Apache ความเร็วในการโหลดสูงสุดคือ 154ms สำหรับ direct และ 164 ผ่าน Apache ไม่แตกต่างกันอย่างมีนัยสำคัญ ถ้าฉันมีความหรูหราของสอง IP ฉันจะไม่ส่งผ่าน Apache แต่ตอนนี้ฉันจะติดกับ Proxypass
kaan_a

5
พร็อกซีนี้ร้องขอจาก Apache ไปยังโหนดหรือไม่ในขณะที่ใช้ประโยชน์จากลักษณะที่ไม่มีการบล็อกของโหนด
ติดตาม

2
สวัสดี @Basj ฉันไม่มีประสบการณ์ในการติดตั้งการสนับสนุนสำหรับ websockets ด้วยตัวเอง ต้องบอกว่า Apache 2.4.6 ดูเหมือนจะมีการสนับสนุนสำหรับพร็อกซีจราจร WebSockets mod_proxy_wstunnelกับการใช้ ฉันเห็นว่าคุณได้พบคำตอบของคุณแล้วสำหรับคนอื่นที่มีปัญหาเดียวกันโปรดดูที่: serverfault.com/questions/616370/…
Steven de Salas

4
ฉันจะเพิ่มสิ่งนี้ในการแจกแจงแบบเดเบียนได้ที่ไหน ไม่มีไฟล์ httpd.conf
santi

63

คำถามนี้มีอยู่มากในServer Faultแต่ FWIW ฉันจะบอกว่าการใช้ Apache ต่อหน้า Node.js ไม่ใช่วิธีที่ดีในกรณีส่วนใหญ่

ProxyPass ของ Apache นั้นยอดเยี่ยมสำหรับสิ่งต่าง ๆ มากมาย (เช่นการเปิดเผยบริการ Tomcat ซึ่งเป็นส่วนหนึ่งของเว็บไซต์) และหากแอป Node.js ของคุณกำลังทำหน้าที่เล็ก ๆ น้อย ๆ หรือเป็นเครื่องมือภายในที่มีผู้ใช้งานจำนวน จำกัด มันอาจจะง่ายกว่าที่จะใช้เพื่อให้คุณสามารถใช้งานได้และเดินหน้าต่อไป

หากคุณต้องการใช้ประโยชน์จากประสิทธิภาพและขนาดที่คุณจะได้รับจากการใช้ Node.js - และโดยเฉพาะอย่างยิ่งถ้าคุณต้องการใช้สิ่งที่เกี่ยวข้องกับการรักษาการเชื่อมต่อแบบถาวรเช่นเว็บซ็อกเก็ต - คุณควรใช้ Apache และ Node ของคุณ js บนพอร์ตอื่น (เช่น Apache บน localhost: 8080, Node.js บน localhost: 3000) จากนั้นเรียกใช้บางอย่างเช่น nginx, Varnish หรือ HA proxy ด้านหน้า - และการรับส่งข้อมูลด้วยวิธีนั้น

ด้วยบางสิ่งเช่นวานิชหรือ nginx คุณสามารถกำหนดเส้นทางการจราจรตามเส้นทางและ / หรือโฮสต์ พวกเขาทั้งสองใช้ทรัพยากรระบบน้อยกว่ามากและสามารถปรับขนาดได้มากขึ้นเมื่อใช้ Apache เพื่อทำสิ่งเดียวกัน


13
คำตอบนี้ควรมี upvotes มากกว่านี้ มันเป็นวิธีที่ดีกว่าในการใช้พร็อกซี nginx มากกว่า apache one
rerich

Ya แต่มันเป็นทรัพยากรเข้มข้น
Oracle

1
คุณมีตัวเลขบางส่วนในการสำรองคำสั่งของคุณว่า nginx จะใช้ทรัพยากรน้อยกว่า httpd หรือไม่
RedShift

ฉันไม่คิดว่ามันค่อนข้างน่าทึ่ง ในขณะที่ฉันพยายามที่จะไม่ลิงก์ออกในการตอบกลับเนื่องจากลิงก์นั้นบอบบาง แต่คุณสามารถค้นหาการสนทนาและตัวอย่างผ่าน Google - เช่นhelp.dreamhost.com/hc/en-us/articles/ …… Apache เป็นซอฟต์แวร์ที่ดี แต่โดยทั่วไปแล้วไม่ใช่ วิธีการที่ยอดเยี่ยมในบริบทเช่นนี้
คอลลินเลน

คำตอบนี้ฟังดูดี แต่วิธีเข้าถึง Node.js ผ่าน httpS เหมือนที่ Apache ได้ทำไปแล้ว?
ปิแอร์

34


คำแนะนำในการทำงานnode serverพร้อมapache2(v2.4.xx) server:

เพื่อท่อคำขอทั้งหมดที่ URL เฉพาะเพื่อการประยุกต์ใช้ Node.js ของคุณสร้างCUSTOM.confไฟล์ภายใน/etc/apache2/conf-availableไดเรกทอรีและเพิ่มบรรทัดต่อไปนี้ไปยังแฟ้มสร้าง:

ProxyPass /node http://localhost:8000/

เปลี่ยน 8000 node serverหมายเลขพอร์ตที่ต้องการสำหรับ
เปิดใช้งานการกำหนดค่าแบบกำหนดเองด้วยคำสั่งต่อไปนี้:

$> sudo a2enconf CUSTOM

CUSTOM เป็นชื่อไฟล์ที่สร้างขึ้นใหม่โดยไม่มีส่วนขยายจากนั้นเปิดใช้งานproxy_httpด้วยคำสั่ง:

$> sudo a2enmod proxy_http

ควรเปิดใช้งานทั้งสองproxyและproxy_httpโมดูล คุณสามารถตรวจสอบว่าโมดูลถูกเปิดใช้งานหรือไม่ด้วย:

$> sudo a2query -m MODULE_NAME

หลังจากเปิดใช้งานการกำหนดค่าและโมดูลคุณจะต้องรีสตาร์ทเซิร์ฟเวอร์ apache:

$> sudo service apache2 restart

ตอนนี้คุณสามารถรันโหนดเซิร์ฟเวอร์ คำร้องขอทั้งหมดไปยังURL/nodeจะถูกจัดการโดยโหนดเซิร์ฟเวอร์


ทำงานเหมือนจับใจ! :)
Kees Koenen

15

การเรียกใช้ Node และ Apache บนเซิร์ฟเวอร์เดียวนั้นไม่สำคัญเนื่องจากไม่ขัดแย้งกัน NodeJS เป็นเพียงวิธีการดำเนินการด้านเซิร์ฟเวอร์ JavaScript ขึ้นเขียงจริงมาจากการเข้าถึงทั้ง Node และ Apache จากภายนอก เท่าที่ฉันเห็นคุณมีสองทางเลือก:

  1. ตั้งค่า Apache ให้พร็อกซีคำขอที่ตรงกันทั้งหมดไปที่ NodeJS ซึ่งจะทำการอัปโหลดไฟล์และสิ่งอื่นใดในโหนด

  2. มี Apache และ Node บน IP ที่แตกต่างกัน: การรวมพอร์ต (หากเซิร์ฟเวอร์ของคุณมีสอง IP จากนั้นหนึ่งสามารถถูกผูกไว้กับฟังโหนดของคุณอื่น ๆ เพื่อ Apache)

ฉันก็เริ่มสงสัยว่านี่อาจไม่ใช่สิ่งที่คุณกำลังมองหา หากเป้าหมายสุดท้ายของคุณคือให้คุณเขียนตรรกะการใช้งานของคุณใน Nodejs และบางส่วน "การจัดการไฟล์" ที่คุณถ่ายโอนไปยังผู้รับเหมานั้นเป็นทางเลือกของภาษาไม่ใช่เว็บเซิร์ฟเวอร์


9

คุณสามารถใช้วิธีอื่นเช่นการเขียนพร็อกซีเซิร์ฟเวอร์ย้อนกลับที่มี nodejs ไปยังพร็อกซีทั้ง apache และแอปอื่น ๆ ของ nodejs

ก่อนอื่นคุณต้องทำให้ apache ทำงานบนพอร์ตอื่นนอกเหนือจากพอร์ต 80 เช่นพอร์ต 8080

จากนั้นคุณสามารถเขียนสคริปต์พร็อกซีย้อนกลับด้วย nodejs ดังนี้:

var proxy = require('redbird')({port: 80, xfwd: false);

proxy.register("mydomain.me/blog", "http://mydomain.me:8080/blog");
proxy.register("mydomain.me", "http://mydomain.me:3000");

บทความต่อไปนี้อธิบายกระบวนการทั้งหมดของการทำสิ่งนี้

เรียกใช้ APACHE กับ NODE JS REVERSE PROXY โดยใช้ REDBIRD


2
ProxyPass /node http://localhost:8000/     
  • สิ่งนี้ใช้ได้สำหรับฉันเมื่อฉันทำรายการข้างต้นใน httpd-vhosts.conf แทนที่จะเป็น httpd.conf
  • ฉันติดตั้ง XAMPP บนสภาพแวดล้อมของฉัน & กำลังมองหาปริมาณข้อมูลทั้งหมดที่ apache บนพอร์ต 80 โดยใช้ NodeJS applicatin ที่ทำงานบนพอร์ต 8080 เช่นhttp: // localhost / [name_of_the_node_application]

1

ฉันรวมคำตอบข้างต้นกับ certbot SSL cert และ CORS access-control-allow-headers และทำให้มันทำงานได้ดังนั้นฉันคิดว่าฉันจะแบ่งปันผลลัพธ์

Apache httpd.conf ถูกเพิ่มเข้าไปที่ด้านล่างของไฟล์:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

การตั้งค่า Apache VirtualHost (doc root สำหรับ PHP อยู่ภายใต้ Apache และ SSL กับ Certbot ในขณะที่เว็บไซต์ node.js / socket.io ทำงานบนพอร์ต 3000 - และใช้ใบรับรอง SSL จาก Apache) นอกจากนี้สังเกตว่าเว็บไซต์ node.js ใช้พร็อกซีสำหรับโฟลเดอร์ / nodejs, socket.io และ ws (websockets):

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName www.example.com
    ServerAlias www.example.com
    DocumentRoot /var/html/www.example.com
    ErrorLog /var/html/log/error.log
    CustomLog /var/html/log/requests.log combined
    SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf

    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^socket.io          [NC]
    RewriteCond %{QUERY_STRING} transport=websocket [NC]
    RewriteRule /{.*}       ws://localhost:3000/$1  [P,L]

    RewriteCond %{HTTP:Connection} Upgrade [NC]
    RewriteRule /(.*) ws://localhost:3000/$1 [P,L]

    ProxyPass /nodejs http://localhost:3000/
    ProxyPassReverse /nodejs http://localhost:3000/

    ProxyPass /socket.io http://localhost:3000/socket.io
    ProxyPassReverse /socket.io http://localhost:3000/socket.io

    ProxyPass /socket.io ws://localhost:3000/socket.io
    ProxyPassReverse /socket.io ws://localhost:3000/socket.io

</VirtualHost>
</IfModule>

จากนั้นแอป node.js ของฉัน (app.js):

var express = require('express');
var app = express();
    app.use(function(req, res, next) {
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Headers", "X-Requested-With");
        res.header("Access-Control-Allow-Headers", "Content-Type");
        res.header("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE, OPTIONS");
        next();
    });
var http = require('http').Server(app);
var io = require('socket.io')(http);

http.listen({host:'0.0.0.0',port:3000});

ฉันบังคับให้ฟัง ip4 แต่นั่นก็เป็นทางเลือก - คุณสามารถแทนที่:

http.listen(3000);

รหัสแอป node.js (app.js) ดำเนินการต่อด้วย:

io.of('/nodejs').on('connection', function(socket) {
    //optional settings:
    io.set('heartbeat timeout', 3000); 
    io.set('heartbeat interval', 1000);

    //listener for when a user is added
    socket.on('add user', function(data) {
         socket.join('AnyRoomName');
         socket.broadcast.emit('user joined', data);
    });

    //listener for when a user leaves
    socket.on('remove user', function(data) {
         socket.leave('AnyRoomName');
         socket.broadcast.emit('user left', data);
    });

    //sample listener for any other function
    socket.on('named-event', function(data) {
         //code....
         socket.broadcast.emit('named-event-broadcast', data);
    });

    // add more listeners as needed... use different named-events...
});

ในที่สุดฝั่งไคลเอ็นต์ (สร้างเป็น nodejs.js):

//notice the /nodejs path
var socket = io.connect('https://www.example.com/nodejs');

//listener for user joined
socket.on('user joined', function(data) {
    // code... data shows who joined...
});

//listener for user left
socket.on('user left', function(data) {
    // code... data shows who left...
});

// sample listener for any function:
socket.on('named-event-broadcast', function(data) {
    // this receives the broadcast data (I use json then parse and execute code)
    console.log('data1=' + data.data1);
    console.log('data2=' + data.data2);
});

// sample send broadcast json data for user joined:
socket.emit('user joined', {
    'userid': 'userid-value',
    'username':'username-value'
});

// sample send broadcast json data for user left 
//(I added the following with an event listener for 'beforeunload'):
// socket.emit('user joined', {
//     'userid': 'userid-value',
//     'username':'username-value'
// });

// sample send broadcast json data for any named-event:
socket.emit('named-event', {
    'data1': 'value1',
    'data2':'value2'
});

ในตัวอย่างนี้เมื่อ JS โหลดมันจะปล่อยไปยังซ็อกเก็ต "named-event" ส่งข้อมูลใน JSON ไปยังเซิร์ฟเวอร์ node.js / socket.io

การใช้ io และซ็อกเก็ตบนเซิร์ฟเวอร์ภายใต้ path / nodejs (เชื่อมต่อโดยไคลเอนต์) ได้รับข้อมูลจากนั้นส่งเป็นข้อมูลออกอากาศอีกครั้ง ผู้ใช้รายอื่นในซ็อกเก็ตจะรับข้อมูลพร้อมฟัง "named-event-broadcast" โปรดทราบว่าผู้ส่งไม่ได้รับการถ่ายทอดของตนเอง


0

ฉันเพิ่งพบปัญหานี้ซึ่งฉันต้องสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์โดยใช้ websocket ในโครงการ codeigniter จาก PHP

ฉันแก้ไขปัญหานี้โดยเพิ่มพอร์ตของฉัน (แอปโหนดที่ทำงานอยู่) ลงในAllow incoming TCP ports& Allow outgoing TCP portsรายการ

คุณสามารถค้นหาการกำหนดค่าเหล่านี้ได้ในFirewall Configurationsแผง WHM ของเซิร์ฟเวอร์ของคุณ


-1

ฉันกำลังมองหาข้อมูลเดียวกัน ในที่สุดก็พบคำตอบจากลิงค์ในคำตอบข้างต้นโดย @Straseus

http://arguments.callee.info/2010/04/20/running-apache-and-node-js-together/

นี่คือทางออกสุดท้ายในการรันเว็บไซต์ apache บนพอร์ต 80, โหนด js service บนพอร์ต 8080 และใช้. htaccess RewriteRule

ใน DocumentRoot ของเว็บไซต์ apache ให้เพิ่มรายการต่อไปนี้:

Options +FollowSymLinks -MultiViews

<IfModule mod_rewrite.c>

RewriteEngine on

# Simple URL redirect:
RewriteRule ^test.html$ http://arguments.callee.info:8000/test/ [P]

# More complicated (the user sees only "benchmark.html" in their address bar)
RewriteRule ^benchmark.html$ http://arguments.callee.info:8000/node?action=benchmark [P]

# Redirect a whole subdirectory:
RewriteRule ^node/(.*) http://arguments.callee.info:8000/$1 [P]

สำหรับการเปลี่ยนเส้นทางระดับไดเรกทอรีลิงก์ด้านบนกฎที่แนะนำ (. +) ซึ่งต้องการอักขระหนึ่งตัวขึ้นไปหลังจาก 'node /' ฉันต้องแปลงเป็น (. *) ซึ่งเป็นศูนย์หรือมากกว่านั้นเพื่อให้สิ่งของของฉันทำงาน

ขอบคุณมากสำหรับลิงค์ @Staseus


3
โปรดทราบว่าการตั้งค่าสถานะ [P] จำเป็นต้องmod_proxyเปิดใช้งานApache
Simon East

สิ่งนี้ไม่มีประสิทธิภาพ ทำไมเรียกเครื่องยนต์ Rewrite กว่าง่ายProxyPass?
Michael Irigoyen

-2

ฉันสมมติว่าคุณกำลังสร้างเว็บแอปเพราะคุณอ้างถึง Apache และ Node คำตอบด่วน - เป็นไปได้ - ใช่ แนะนำหรือไม่ - ไม่ โหนดรวมเป็นเว็บเซิร์ฟเวอร์ของตัวเองและเว็บไซต์ส่วนใหญ่ทำงานบนพอร์ต 80 ฉันยังสมมติว่าขณะนี้ไม่มีปลั๊กอิน Apache ซึ่งได้รับการสนับสนุนโดย Nodejs และฉันไม่แน่ใจว่าการสร้างโฮสต์เสมือนเป็นวิธีที่ดีที่สุดในการใช้งาน นี่คือคำถามที่ควรตอบโดยนักพัฒนาที่รักษา Nodejs เช่นคนดีที่ Joyent

แทนที่จะเป็นพอร์ตมันจะดีกว่าที่จะประเมินกองเทคโนโลยีของ Node ซึ่งแตกต่างอย่างสิ้นเชิงจากคนอื่น ๆ ส่วนใหญ่และนั่นคือเหตุผลที่ฉันรักมัน แต่ก็เกี่ยวข้องกับการประนีประนอมเล็กน้อยที่คุณควรทราบล่วงหน้า

ตัวอย่างของคุณมีลักษณะคล้ายกับ CMS หรือเว็บแอปที่แชร์และมีแอพที่ใช้งานได้หลายร้อยกล่องซึ่งจะทำงานได้ดีบน Apache แม้ว่าคุณจะไม่ชอบโซลูชันสำเร็จรูปใด ๆ ก็ตามคุณสามารถเขียน webapp ใน PHP / Java / Python หรือมิกซ์แอนด์แมช n จับคู่กับแอพสำเร็จรูปที่มีอยู่สองแอปและพวกเขาทั้งหมดได้รับการออกแบบและสนับสนุนให้ทำงานเบื้องหลัง Apache เดียว

ได้เวลาหยุดและคิดเกี่ยวกับสิ่งที่ฉันพูด

ตอนนี้คุณพร้อมที่จะตัดสินใจว่าจะใช้ techstack ใด หากเว็บไซต์ของคุณจะไม่ใช้แอพที่สร้างมาแล้วหลายพันรายการที่ต้องใช้ Apache ให้ไปที่ Node ไม่เช่นนั้นคุณต้องกำจัดสมมติฐานที่ฉันได้กล่าวไว้ก่อนหน้านี้

ในที่สุดการเลือก techstack ของคุณมีความสำคัญมากกว่าองค์ประกอบใด ๆ

ฉันเห็นด้วยอย่างสมบูรณ์กับ @Strusus ว่ามันค่อนข้างเล็กน้อยที่จะใช้ระบบไฟล์ node.js API สำหรับการจัดการการอัปโหลดและดาวน์โหลด แต่คิดเกี่ยวกับสิ่งที่คุณต้องการจากเว็บไซต์ของคุณในระยะยาวแล้วเลือก Techstack ของคุณ

กรอบการเรียนรู้ของโหนดนั้นง่ายกว่าการเรียนรู้กรอบอื่น ๆ แต่มันไม่ใช่ยาครอบจักรวาล ด้วยความพยายามเล็กน้อย (ซึ่งอาจเป็นความพยายามที่คุ้มค่าในตัวเอง) คุณสามารถเรียนรู้กรอบงานอื่น ๆ ได้เช่นกัน เราทุกคนเรียนรู้จากกันและกันและคุณจะมีประสิทธิผลมากขึ้นถ้าคุณทำงานเป็นทีมเล็กกว่าถ้าคุณทำงานคนเดียวและทักษะด้านเทคนิคของแบ็กเอนด์จะพัฒนาได้เร็วขึ้น ดังนั้นอย่าลดทักษะของสมาชิกคนอื่นในทีมของคุณอย่างถูก

โพสต์นี้มีอายุประมาณหนึ่งปีและมีโอกาสที่คุณได้ตัดสินใจไปแล้ว แต่ฉันหวังว่าคำโม้ของฉันจะช่วยคนต่อไปที่จะต้องทำการตัดสินใจแบบเดียวกัน

ขอบคุณที่อ่าน.

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