Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA开发人员的NodeJS-几个问题_Java_Node.js_Express - Fatal编程技术网

JAVA开发人员的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。不需要连

我正在做一个非常基于json的项目。因为JAVA中90%的服务器端都是POJO.toJSON(),所以我决定尝试一下NodeJS

我的大多数问题都与NodeJS作为单个线程运行这一事实有关

  • 我说得对吗?:)
  • NodeJS使用require('something')。这是否意味着我可以将整个应用程序视为一个文件
  • 如果2为“是”,则在函数外部声明的变量应该对整个应用程序可见。换句话说,如果我声明var dbConnection=。。。;我可以从任何地方/任何文件访问dbConnection。不需要连接池?!?你能确认一下吗
  • 如果为true,则在所有请求之间共享一个连接。我预计这将对表演产生巨大影响。你能澄清一下吗
  • 作为一名JAVA开发人员,我应该避免哪些习惯?例:如果我正在和db交换JSON,DTO看起来是非常无用的(当然除了文档目的)
  • 为什么我觉得每个人在我看来完全不一样的时候都会比较有棱角来表达呢?如果我理解正确,Angular似乎非常适合与服务器上运行的NodeJS/Express交换JSON
  • 谢谢

    1)节点正在使用Javascript,因此它是单线程和非阻塞的

    2) 如果我正确理解你的意思。。是的,您可以有一个单文件应用程序。当应用程序变大时,这可能会让你的生活变得悲惨

    3) 是。此变量将通过文件进行访问。关于mysql的详细信息和代码,您可以使用

    4) 单个连接会造成性能问题。你最好使用游泳池。请在上面的链接上再次输入信息

    5) 不知道

    6) Angular是客户端,express是服务器端,它们的用途不同。有关快车和快车的信息。angular

    1)Node.JS上的信息不是单线程的。它使用多个线程。但是JavaScript虚拟机(在大多数情况下是V8)是单线程的(在某种程度上,有一些方法可以生成线程和进程)。所以JavaScript提供的任何调用都是单线程的。但是,如果希望在node.js提供的异步编程之外引入并行性,则可以在node.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:
    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您将得到globalVarmyGlobal的值作为输出。但你不会。 因为每个模块都有自己的全局。 但是,由于缓存(一个模块只加载一次),如果您需要一个全局变量,可以从多个模块和位置访问该变量,则可以使用一个模块

    请参见此示例:

    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上已经回答了许多问题。谢谢!“单文件”的意思是,在运行时下载整个代码,我不打算在一个文件中编写整个代码!:)