Hỏi về require() và các define 1 instance trong express



  • Mình thấy nodejs có đoạn khai báo 1 biến = hàm require() tuy nhiên không hiểu lúc này thì cái biến đó trả về cái gì ??

    VD
    var express = require('express'); var app = express();

    lúc này thì express khác gì với app?
    tại sao app thì có thể xài method use còn express thì không?



  • var express = require('express'); cái này chỉ trả về con trỏ method thôi. Bạn có thể khai báo var app = require('express')();
    Tốt hơn hết là nên kiếm quyển sách về nodejs, nó sẽ nói rất kĩ về vụ require của nodejs.



  • Lấy sách ra đọc thì còn mất công hỏi làm gì? Forum này lập ra là để hỏi, hỏi lại bảo thành viên lôi sách ra đọc thì cũng thua :(

    Theo như trả lời của bạn thì require() về cơ bản là để khởi tạo 1 instance?
    VD PHP thì $abc = ClassName(); ?
    rồi $abc->use(); để access tới method?

    Cái thắc mắc là nếu thế thì var app = express(); có vai trò gì?



    1. require('express') mặc định trả về 1 fuction
      -> gán vào express -> express là 1 function
      Ngoài ra còn có export static, Router, ...

    2. Sau khi invoke express nó trả về 1 object (gọi nó là instance app cũng ok). Lúc đó thì cứ theo API triển http://expressjs.com/en/4x/api.html



  • @Hung-Pham-Do đã nói trong Hỏi về require() và các define 1 instance trong express:

    http://expressjs.com/en/4x/api.html

    Thanks bạn

    Theo mình hiểu express() là 1 function nằm trong module express, và nó đã đc exports nên lúc này function express sẽ access được vào từ 1 file khác (ở đây là gán vào app). Và các child method như set use nên lúc này biến app chính là instance của hàm express() ?

    Còn require() nó về cơ bản là instance của 1 module express?



  • @picolo đã nói trong Hỏi về require() và các define 1 instance trong express:

    Thanks bạn

    Theo mình hiểu express() là 1 function nằm trong module express, và nó đã đc exports nên lúc này function express sẽ access được vào từ 1 file khác (ở đây là gán vào app). Và các child method như set use nên lúc này biến app chính là instance của hàm express() ?

    Yep!!!

    Còn require() nó về cơ bản là instance của các 1 module express?

    Đơn giản là chỉ sử dụng những gì module express export ra chứ ko phải là instance của module :)



  • Khá nhiều điều thú vị về method require() này,
    Khi require cùng một module ('module_name') trong nhiều file khác nhau của 1 project (var module = require('module_name')) , require sẽ trả về duy nhất một instance đã được khởi tạo từ lần đầu tiên => module được require ở các file khác nhau sẽ dùng chung 1 instance.
    Các bạn cho ý kiến về điều này được không ạ?



  • @atatakai-mashou Cái này hình như có 1 topic hỏi rồi và đúng là như thế :D. require('abc') sẽ được cache lại, và chỉ có duy nhất 1 instance trong cùng 1 project :)



  • @thelonglqd nếu 2 require trong 1file thì thế nào a. Trả về 2 instane A và B. Rồi nếu require ở file khác thì trả về instance nào a, là A hay B. Rồi nếu có 1 file khác nữa chứa 2 require nữa thì có trả về A và B k hay trả về khác a. :(



  • @Thế-Vĩ-Trịnh bạn cứ phức tạp vấn đề quá, các bạn ấy đã bảo require chỉ trả về duy nhất một instance , bạn có require ở mấy file nó cũng chỉ có 1 địa chỉ thôi.
    Vì trong lần đầu require(module) => require tạo ra cache object. Các lần tiếp theo nó sẽ check trong cache, có trong bộ nhớ cache thì trả lại luôn nên nó là duy nhất.

    Bạn thích tìm hiểu sâu nữa không :D vào web các bạn bên kipalog.com xem các "thánh" ấy chém gió nhé, mấy bạn bên ấy thích nghiên cứu SÂU và viết bài kiểu thần thánh và có lẽ sẽ hợp với các bạn muốn phức tạp mọi thứ =))



  • @Thế-Vĩ-Trịnh Ý bạn là require 2 module giống nhau trong cùng 1 file à?
    Kiểu như:

    var http = require('http');
    var http1 = require('http');

    Nếu ý bạn như trường hợp trên m vừa viết thì không phải là 2 instances, mà chỉ là 2 biến, trỏ vào cùng 1 instance ở trong cache thôi bạn nhé. Nói chung nó vẫn là 1 object thôi ^^.



  • @thelonglqd tks các bạn, m- có muốn phức tạp đâu, nghe các bạn trên bảo là require trong 2 file khác nhau nên m- nghĩ nếu require trong cùng 1 file thì thế nào vì trc đây m- từng đọc 1 file code require 2 lần cùng 1 module mà k hiểu để làm j nên hỏi thôi mà. :'(


  • Global Moderator

    @thelonglqd đã nói trong Hỏi về require() và các define 1 instance trong express:

    @Thế-Vĩ-Trịnh Ý bạn là require 2 module giống nhau trong cùng 1 file à?
    Kiểu như:

    var http = require('http');
    var http1 = require('http');

    Nếu ý bạn như trường hợp trên m vừa viết thì không phải là 2 instances, mà chỉ là 2 biến, trỏ vào cùng 1 instance ở trong cache thôi bạn nhé. Nói chung nó vẫn là 1 object thôi ^^.

    Chuẩn (y)

    Tech-nông
    Twitter: @nhubaovu
    Profile: about.me/vunb

    0

Log in to reply