1)Node.JS不是單線程的。它使用多個線程。但是JavaScript虛擬機(在大多數情況下是V8)是單線程的(在某種程度上,可以創建線程和進程)。所以JavaScript提供的任何調用大多是單線程的。然而,如果你想引入除了異步編程Node.JS之外的並行性,你可以在node.js下創建線程,進程和工作者.JS自然提供了
2)我不太清楚你在這裏實現了什麼。如果問題是,「我可以寫我的整個代碼到一個單一的文件?」,是的,你可以。如果問題是,「是要求加載所有的代碼到一個應用程序,然後執行它?」,這是不完全正確的。 CommonJS是這樣做的,但是在Node.JS中它綁定到一個較低的級別。 CommonJS行爲是模擬的,但性能稍高。請記住,每個模塊都在其自己的範圍內運行,並且它被緩存(因此即使從多個位置引用該模塊,也只會加載一次)。即使是主要加載的應用程序實際上被視爲模塊,並在其他自己的範圍內運行。在節點的「全局」範圍內只有很少的東西
3)看看我對問題2的回答。每個模塊,包括主要應用程序的起點都在不同的範圍內運行。他們中沒有一個能夠進入全球「全球」範圍。有這樣的事情,但不是爲了方便訪問。請看下面的例子:
a.js:
globalVar = 1
global.myGlobal = 33
require('./b')
b.js:
console.log(global, global.globalVar, global.myGlobal);
console.log(globalVar)
如果有一個全球性的空間,你覺得事情是這樣的,如果你運行節點./a.js你將作爲輸出得到值globalVar和myGlobal。但你不會。 因爲每個模塊都有自己的全局模塊。 但是,由於緩存(一個模塊只加載一次),如果您需要一個可從多個模塊和位置訪問的全局變量,則可以通過模塊來實現。
見這個例子:
a.js:
var b = require('./b');
console.log(b.sharedVariable++);
require('./c');
b.js:
sharedVariable=33;
module.exports = global
c.js:
var b = require('./b');
console.log(b.sharedVariable);
如果你運行這個與節點./a.js你會得到33和34這是唯一可能的,如果B模塊被加載一次內部,而所有其他的電話只是參考它。如果那不是真的,你會得到33和33.這是一件好事。它不僅加速了節點,編譯和加載過程,而且還爲您提供了一種根據需要創建內部消息傳遞的機制,通過專門設計的模塊。無論如何,不要像這個例子那樣實現你的模塊。這個例子就是爲了證明一點(本地化的全局命名空間和緩存)。有更好的模式寫模塊:)
4)單連接在什麼意義上?節點不使用單一連接,也不提供這種連接。您可以很好地控制會話,您可以打開多個連接,或者根據需要重複使用,或者使用連接池。你可以做任何你喜歡的事情。
5)不要寫同步代碼。將其分割成儘可能小的任務,這將使您的應用程序的執行抖動更小。
6)我沒有Angular與Express相比的感覺。 Express是Node.JS中使用的流行的HTTP路徑路由器(並且它不是唯一的),而AngularJS(大部分)是在瀏覽器上運行的前端UI。他們一起工作,而不是互相攻擊。即使您使用Angular Universal(服務器端Angular,在將其加載到瀏覽器之前預先編譯Angular代碼的一部分),您仍可能需要在後端明確指定http路由器,以便爲您的REST查詢提供服務。它們是非常不同的東西
在提出這些問題之前,請閱讀NodeJS教程。並且很多這些問題已經在stackoverflow上得到了解答。 – Mox