【问题标题】:Using a node.js app with HTML使用带有 HTML 的 node.js 应用程序
【发布时间】:2017-11-02 14:09:03
【问题描述】:

我的目标是:JS 但服务器端。我的解决方案,很明显,node.js。我用过 node.js 有点安静。主要用于应用程序,而不是 Web 服务器。我需要做服务器端 JS 的唯一原因是我需要使用一个连接到 Discord API 的库。所以我有一个小测试.js 文件,里面有我的node.js。如果有效,它只会打印文本。基本的。我需要它做的是每当有人去https://example.com/something 时,它会运行node.js 脚本,如果脚本以打印“hello”结束,那么https://example.com/something 会说“hello”。

我对此进行了一些研究,我找到了部署 node.js 应用程序的方法,我知道该怎么做。不过,我真的找不到任何我想要的东西。

【问题讨论】:

  • @IuriiDrozdov 我可以指定一个特定的地址而不是 IP 吗?
  • 您可以使用域名或IP地址。
  • @IuriiDrozdov 好的,所以我可以在我的示例中包含/something,对吗?因为那是主要部分
  • 您需要添加 const url = require('url'); 并拥有类似 const pathName =url.parse(request.url).pathname;if (pathName == '/somehting') { your code here } 的内容。

标签: javascript html node.js deployment


【解决方案1】:

您可以使用 express 在 nodejs 上运行网络服务器

  1. 通过命令提示符在项目文件夹中运行“npm install express”来安装 express
  2. 使用以下代码创建一个app.js 文件

        var express = require('express'); // load the express library
        var app = express(); // create an instance of express
        var child_process = require('child_process'); //load the child_process module
    
        app.get("/something", function(req, res) { // Setup a router which listens to the site http://localhost/something
            child_process.fork("./yourCodeFile.js"); // Launch your code file
        });
    
        app.listen(80);
    
  3. 运行node app.js 监听网络连接

然后你把你的代码放到 yourCodeFile.js 中,它必须和 app.js 文件在同一个文件夹中,更好的是你可以把所有的代码写在 app.js 代码中,只要你保留在app.get里面的函数里面

【讨论】:

  • 我相信他说Note: I don't want to have to do node file.js in command prompt. ??如果他必须“运行node app.js”,这有什么不同?
  • 谢谢,我会调查的。和@Zak,我认为这会很好,我认为没有办法绕过那部分:P
  • 不是child_process.fork("code.js"),我可以把我的代码放在那里吗?
  • 是的,你可以把你的代码放在那里,它确实适用于 apache,但你需要设置一个反向代理 slate.com/blogs/outward/2015/08/10/…
【解决方案2】:

您应该查看基于云的 lambda 函数和平台,例如 AWS Lambda,它们运行脚本以响应 HTTP 请求。它们相对较新,用于支持这一点的架构被称为“无服务器”,这是一个简单的术语,尽管用词不当。有各种工具可以帮助您构建这些系统,例如名称相似的 Serverless 框架,尽管您通常仍然可以使用您可能更熟悉的更传统的服务器框架。无论哪种方式,您都不负责管理任何服务器,包括启动或停止它。

在构建您满意的响应方面,您当然可以使用任何您想要的任意字符串进行响应。请参阅 Node.js handler 的 AWS 示例。

exports.myHandler = function(event, context, callback) {
    callback(null, "Hello, world!");
}

Lambda 函数也可以return binary data 并与Amazon S3 等静态存储系统很好地配合使用。例如,函数可以响应creation of static assets运行。

【讨论】:

    【解决方案3】:

    您的代码应如下所示:

    const http = require('http');
    const url = require('url');
    
    const hostname = '127.0.0.1';
    const port = 3000;
    
    const server = http.createServer((req, res) => {
          res.statusCode = 200;
          res.setHeader('Content-Type', 'text/plain');
    
          const pathName =url.parse(req.url).pathname;
          if (pathName == '/something') {
              res.end('Hello World\n');
          } else {
              res.end('Please visit /something \n');
          }
    });
    
    server.listen(port, hostname, () => {
          console.log(`Server running at http://${hostname}:${port}/`);
    });
    

    您应该使用node youfile.js 运行您的文件,当您使用curl http://127.0.0.1:3000 时,您会看到

    请访问 /something

    但是当你做curl http://127.0.0.1:3000/something你会看到

    你好世界

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 1970-01-01
      • 2015-12-07
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多