Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
如何设置Node.js和Express(MERN stack)_Node.js_Reactjs_Express_Ubuntu_Nginx - Fatal编程技术网

如何设置Node.js和Express(MERN stack)

如何设置Node.js和Express(MERN stack),node.js,reactjs,express,ubuntu,nginx,Node.js,Reactjs,Express,Ubuntu,Nginx,我是整个Node JS社区的新手,我正在尝试使用MERN(Mongo DB、Express、React、Node JS)构建一个测试应用程序。我来自LAMP堆栈(Linux、Apache、MySQL和PHP) 我已经在Ubuntu18(AWS EC2)上安装了node.js服务器,并安装了node js、Express和Mongo DB。据我所知,Express是一种类似于Apache或Nginx的web服务器吗?那么它不能取代Nginx和Apache吗?我看到一些使用Nginx和Express

我是整个Node JS社区的新手,我正在尝试使用MERN(Mongo DB、Express、React、Node JS)构建一个测试应用程序。我来自LAMP堆栈(Linux、Apache、MySQL和PHP)

  • 我已经在Ubuntu18(AWS EC2)上安装了node.js服务器,并安装了node js、Express和Mongo DB。据我所知,Express是一种类似于Apache或Nginx的web服务器吗?那么它不能取代Nginx和Apache吗?我看到一些使用Nginx和Express的教程,我不知道为什么

  • 另外,如何将我的域(example.com)连接到我的NodeJS服务器?我看到的所有示例都是端口3000或3001上的localhost。当我使用Apache时,我所要做的就是将域指向IP地址,然后进入000-default.conf文件(Apache配置文件),并为域添加要转到的域和目录。但现在当我将域指向我的节点服务器时,它只是说“拒绝连接”。我这样做对吗?我的网站应用程序文件位于文件夹“/var/app”中

  • 来自Apache的配置示例:

    <VirtualHost *:80>
        DocumentRoot /var/www/html
    
        # ...
    </VirtualHost>
    
    
    DocumentRoot/var/www/html
    # ...
    
    谢谢大家的帮助

    只是节点js上的一个框架。NodeJS附带了它的“http”库(Express刚刚包装的那个)

    假设您已经运行了
    npm init
    npm安装--save express
    。运行服务器所需的全部内容如下:

    server.js

    然后运行:

    node app.js
    

    您的终端应该显示输出:“服务器在端口3000上运行!”当你打开浏览器时,它会显示“你好,世界!”

    我会尽力帮你回答第二个问题。 如果要将http服务器与NodeJ一起使用,有两种可能:

    • 您将使用端口80更改express listen()方法调用中的端口,如下所示:

      app.listen(80, () => console.log('Server running on port 80!'))
      
    通过这种方式,您无法在端口80上同时运行nginx或apache

    • 如果您的应用程序是使用端口3000构建的,您将使用nginx或apache作为反向代理,将http请求从您的域的端口80转发到端口3000。 例如,使用nginx配置:

      server {
          listen 80;
          server_name myapp.domain.com;
      
          location / {
              proxy_pass http://localhost:8080;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      }
      

    希望这能对您有所帮助。

    谢谢,但是我如何连接我的域(example.com)而不是localhost?您是否将域名指向您的EC2实例?如果你没有这样做,那么按照这个公会的步骤来做:是的,我做到了,我得到的只是浏览器中的“拒绝连接”。谢谢你!但是需要Nginx或Apache吗?我以为Express可以处理这个问题?是的,您只能将node与Express一起使用。例如,如果您不需要使用apache或nginx来管理服务器上的其他网站或应用程序(专用、vps或其他),则只能使用带有express或其他framework的节点。请记住,端口80上只能使用一个http服务器。你可以在这篇文章中找到一些答案。您将了解到,反向代理对于性能和管理功能来说可能很有趣。
    server {
        listen 80;
        server_name myapp.domain.com;
    
        location / {
            proxy_pass http://localhost:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }