當我匯入“http”模塊時,我使用
Var http = require('http');
http.createServer(function(req,res){......
}.listen(8080)
但是當我匯入 express 模塊時,我使用
const express = require('express');
const app = express();
app.get('/', (req,res)=>{........
}
app.listen()
為什么我需要創建const app = express();而不是const app = http();在代碼中?
uj5u.com熱心網友回復:
您的問題都與匯入無關。
當你這樣做時:
const app = express();
您正在創建 Express 類的實體。該express函式是一個工廠函式,它在您呼叫它時創建一個物件(在本例中它是一個函式物件)。它不是 http 服務器。它既是一系列方法的父物件,也是路由傳入 http 請求的主要請求處理程式。
當你這樣做時:
app.listen()
這將創建您的 http 服務器。實際上,該.listen()方法中的代碼只是為您創建了 http 服務器并注冊app為傳入連接的請求處理程式。
如果你看一下代碼的app.listen(),你只看到這一點:
app.listen = function listen() {
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
它只是使用app函式/物件作為主要請求處理程式創建一個 http 服務器實體,然后它呼叫.listen()以啟動服務器。
所以,app.listen()只是一個捷徑。您可以自己使用該http模塊來創建您自己的服務器物件,然后app用它注冊您的物件,但這app.listen()只是為您做的。
作為教學替代方案,還有許多其他方式來安排代碼。你也可以這樣做:
const express = require('express'); // load express module
const app = express(); // create express instance
const http = require('http'); // load http module
const server = http.createServer(app); // create http server
// and register express listener
server.listen(80); // start http server
這不會利用 中的快捷方式app.listen(),但作業方式相同。
uj5u.com熱心網友回復:
express從模塊匯出一個函式。 http匯出具有函式的物件。
每個圖書館作者都選擇自己的方式來匯出他們的圖書館。
以下是它們如何實施的示例。
module.exports = function() {
// code here
return {
// calling the function returns an object
}
}
module.exports = {
createServer() {
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/390874.html
標籤:节点.js
下一篇:取消禁止用戶發送dm
