2015-06-16 54 views
-3

我正在研究一個基於json的項目。由於90%的服務器端在JAVA將POJO.toJSON()我決定給NodeJS一槍!NodeJS爲JAVA開發人員 - 幾個問題

我的大部分問題都與NodeJS作爲單線程運行有關。

  1. 我說錯了嗎? :)
  2. NodeJS使用require('something')。這是否意味着我可以將整個應用視爲單個文件?
  3. 如果2是yes,則在函數外部聲明的變量應該對整個應用程序可見。換句話說,如果我聲明var dbConnection = ...;我可以從任何位置/任何文件訪問dbConnection。沒有連接池需要?!?你能確認嗎?
  4. 如果爲true,則在所有請求之間共享單個連接。我期望對錶演產生巨大影響。你能澄清一下嗎?
  5. 作爲一名JAVA開發人員,我有什麼習慣應該避免?例如:如果我使用db交換JSON(當然除了文檔目的),DTO似乎毫無用處。
  6. 爲什麼我覺得每個人都比較Angular和Express看起來完全不同?如果我理解正確,Angular看起來非常適合與在服務器上運行的NodeJS/Express交換JSON。

謝謝!

+0

在提出這些問題之前,請閱讀NodeJS教程。並且很多這些問題已經在stackoverflow上得到了解答。 – Mox

回答

1

1)節點使用Javascript,因此它是單線程和非阻塞的。

2)如果我正確理解你的意思。是的,你可以有一個單一的文件應用程序。當應用程序變大時,這可能會讓你的生活變得悲慘。

3)是的。該變量將通過文件訪問。有關mysql的詳細信息和代碼,可以使用這個module

4)單個連接會產生性能問題。你最好使用一個游泳池。請再次點擊上面的鏈接。

5)不知道。

6)Angular是客戶端和express是服務器端,服務不同的目的。關於快遞herehere的信息。關於角度的信息here

+0

謝謝!我的意思是「單個文件」是在運行時整個代碼被下載,我不打算把整個代碼寫在一個文件中! :) – Mark

0

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你將作爲輸出得到值globalVarmyGlobal。但你不會。 因爲每個模塊都有自己的全局模塊。 但是,由於緩存(一個模塊只加載一次),如果您需要一個可從多個模塊和位置訪問的全局變量,則可以通過模塊來實現。

見這個例子:

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查詢提供服務。它們是非常不同的東西