簡體   English   中英

NodeJS Express需求和啟動

[英]NodeJS Express require and initiation

我正在學習NodeJS和Express,然后陷入需求工作的困境。

我的主文件為server.js ,另一個測試文件為test.js。

[server.js]

var express=require('express');

//Include Routes
var rTest=require('./routes/test');

//Express Application COnfiguration
var app=express();

var port=process.env.PORT||3000;
var router=express.Router();    

//Index
router.get('/',function(req,res){
    res.json({message:'Welcome to Index!'});

});    

app.use('/api/t',rTest); //Test    

app.listen(port);

[路線/test.js]

var express=require('express');
var router=express.Router();

    router.route('/')
        .get(function(req,res){
            res.send('Now Test Running OK!');
        });

    module.exports=router;

該代碼可以正常工作-轉到http://localhost:3000/api/t將顯示“ Now ..”消息。 所以我的問題是,為什么我肯定不在從express.Router()引用路由器的同時在test.js中再次創建express應用程序?

當我嘗試用貓鼬創建CRUD時,這變得更加混亂。 為什么我必須在測試路由器文件中引用貓鼬模塊和架構,而不必像在server.js主文件中那樣建立連接。

到目前為止,我已經了解到需求實際上是我所使用的模塊本地的事實,這很有意義,因為每次我在其他模塊中需要依賴模塊時,我都必須引用它們。 但是我不必在路由文件中再次建立連接,也不必監聽路由文件中的某個端口,而在路由文件中使用body-parser(當我使用它時)。

任何指針都會有所幫助。 提前致謝。

require()加載一個代碼模塊,並返回分配給module.exports的所有內容。 通常,應該編寫模塊,以便加載模塊實際上不會創建任何東西,而只是在導出中返回東西,從而允許調用者對模塊進行處理。 的確,這就是快遞模塊的作用。

對於express模塊,它返回一個構造函數,可以像在server.js使用app = express()調用該函數來創建一個Express應用。 您沒有在routes/test.js這樣做,所以您沒有在routes/test.js創建另一個快速應用程序。

注意,由於函數是Javascript中的對象,所以express模塊​​返回的構造函數也可以具有自己的屬性,例如您在routes/test.js中使用的express.Router屬性。

至於您的貓鼬問題,我不太了解您在那兒的要求。 如果您向我們展示該特定代碼,我們可能會對該問題進行進一步評論。

路由文件中的方法將傳遞reqres參數,這些參數是Express作為處理傳入HTTP請求的一部分而創建的。 這些方法位於哪個文件中都沒有關系。Express的工作方式是,傳入的http連接通過Express的各個中間件步驟傳遞,並轉換為requestresponse對象,然后再傳遞給路由器以找出哪個特定的處理程序應處理該特定請求。

如果您在Express(或任何其他中間件功能)中使用body-parsercookie-parser中間件,則在將請求傳遞到任何路由器之前,這些中間件步驟將已經執行。 如果這些中間件步驟所做的是在request對象上創建屬性(這是一種常見方法),則該數據將在傳遞給路由處理程序的request對象上。 除了注冊路由處理程序外,您無需在路由模塊中進行任何特殊的操作。 這就是Express及其中間件的工作方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM