JAVA开发人员的NodeJS-几个问题
我正在做一个非常基于json的项目。因为JAVA中90%的服务器端都是POJO.toJSON(),所以我决定尝试一下NodeJS 我的大多数问题都与NodeJS作为单个线程运行这一事实有关JAVA开发人员的NodeJS-几个问题,java,node.js,express,Java,Node.js,Express,我正在做一个非常基于json的项目。因为JAVA中90%的服务器端都是POJO.toJSON(),所以我决定尝试一下NodeJS 我的大多数问题都与NodeJS作为单个线程运行这一事实有关 我说得对吗?:) NodeJS使用require('something')。这是否意味着我可以将整个应用程序视为一个文件 如果2为“是”,则在函数外部声明的变量应该对整个应用程序可见。换句话说,如果我声明var dbConnection=。。。;我可以从任何地方/任何文件访问dbConnection。不需要连
a.js:
globalVar = 1
global.myGlobal = 33
require('./b')
b.js:
console.log(global, global.globalVar, global.myGlobal);
console.log(globalVar)
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您将得到globalVar和myGlobal的值作为输出。但你不会。
因为每个模块都有自己的全局。
但是,由于缓存(一个模块只加载一次),如果您需要一个全局变量,可以从多个模块和位置访问该变量,则可以使用一个模块
请参见此示例:
a.js:
globalVar = 1
global.myGlobal = 33
require('./b')
b.js:
console.log(global, global.globalVar, global.myGlobal);
console.log(globalVar)
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) 我没有那种感觉,把棱角比作表达。Express只是Node.JS中使用的一种流行HTTP路径路由器(并且不是唯一的一种),而AngularJS(大部分)是在浏览器上运行的前端UI。他们一起工作,而不是互相对抗。即使您使用Angular Universal(服务器端Angular,在加载到浏览器之前预编译Angular代码的一部分),您可能仍然需要在后端使用http router as express来服务REST查询。它们确实是不同的东西在提出这些问题之前,请先阅读NodeJS教程。在stackoverflow上已经回答了许多问题。谢谢!“单文件”的意思是,在运行时下载整个代码,我不打算在一个文件中编写整个代码!:)