首页 > 解决方案 > Node.js 和 PHP 部署

问题描述

我在学校有使用 PHP 的经验。我知道如果你想用 php 建立一个网站,你只需要一个主机并编写带有 .php 扩展名的页面。当然,您可能需要一个数据库来进行 crud 操作。

现在我试图从 php 转移到 node。我只是无法理解节点是如何工作的。可能是我的大脑无法达到哈哈的时刻。

所以首先,假设我想创建一个包含登录、注册、不同页面等的网站。我想使用节点作为服务器端语言。在 php 中,您只需要在实际页面中编写,上传到服务器上,它就会满足您的要求..

这在 node.js 中怎么可能?页面在 javascript 中,并且 javascript 可以从浏览器中编辑,因为它是客户端。那么我如何编写节点以及在哪里?我无法理解它是如何工作的...

如何为节点选择好的主机?我记得像 Aruba 托管这样的网站,它给了我上传我的 php 页面的空间。它如何为节点工作?有特定的主机吗?

对不起,伙计们,我知道这可能是一个愚蠢的问题。但我需要摆脱这种困境..

标签: node.js

解决方案


让我们首先分解您的问题:

所以首先,假设我想创建一个包含登录、注册、不同页面等的网站。我想使用节点作为服务器端语言。在 php 中,您只需要在实际页面中编写,上传到服务器上,它就会满足您的要求..

首先我们必须了解为什么 PHP 会这样工作。根据TechTerms

PHP 代表“超文本预处理器”。PHP 是一种嵌入 HTML 的 Web 脚本语言。这意味着 PHP 代码可以插入到网页的 HTML 中。当访问 PHP 页面时,该页面所在的服务器会读取或“解析”PHP 代码。页面上 PHP 函数的输出通常以 HTML 代码的形式返回,可供浏览器读取。由于 PHP 代码在页面加载之前已转换为 HTML,因此用户无法在页面上查看 PHP 代码。

这当然是 PHP 的最初目的(现在仍然是),在 HTML 中嵌入服务器端代码而不返回源代码而只返回预期的输出,因此它被称为超文本处理器。
最经典的示例是尝试在 HTML 元素中返回自定义消息:

<html>
    <body>
        <div> Hey <b><?php echo $username ?></b>, how are you today? </div>
    </body>
</html>

输出看起来像这样:

嘿, RavenMask,你今天好吗?

这是PHP。当然,有几个可用的框架确实改变了您与 PHP 交互的方式,例如 Laravel 使用的 MVC 模型。

但是现在让我们继续讨论NodeJS
Node 与 PHP 非常不同,但仍然共享相同的概念,比如两者都被解释,我相信这就是你开始困惑的地方,你可能认为下面的代码等同于 PHP:

<html>

<body>
  <div> Hey
    <script>
      document.write(`<b>RavenMask</b>`)
    </script>, how are you today? </div>
</body>

</html>

在某些方面,它是针对客户端的。
NodeJS 是一个服务器端运行时环境,在一个更易于理解的比较中,NodeJS 的工作方式与 C、Java 或 C++ 完全一样(Node 不需要像 GCC 认为的编译器,它使用 JIT 编译器工作,但这是另一个问题)。
虽然 PHP 是一门从头开始设计的语言,可以在网络服务器上运行并很容易嵌入到 HTML 中,但另一方面,Node 的设计更像是一种传统语言,因此,要实现像 PHP 这样的结果,需要很多步骤,就像您需要 C、C++、Java 和任何其他语言一样。

在 Node 中,要实现 PHP 的功能,您需要:

  1. 创建 HTTP 服务器。
  2. 创建一个模板引擎来模仿 PHP 在 HTML 中所做的事情。

对我们来说幸运的是,所有这些步骤都已经在经过实战测试的模块中实现了(甚至在本机 NodeJS 默认库中!),所以,你能得到的最简单的例子是这样的:

const http = require('http')

// Here you're creating the HTTP server, like Apache
const server = http.createServer((request, response) => {
  const username = 'RavenMask'

  // Abuse templating strings!
  // Respose.end means: Give this back to the client and end the cicle of the request
  response.end(`
    <html>
        <body>
            <div> Hey <b>${username}</b>, how are you today? </div>
        </body>
    </html>
  `)
})

// Here is where you create the event loop for the HTTP server
server.listen(3000, (err) => {
  if (err) {
    return console.log('something bad happened', err)
  }

  console.log(`server is listening`)
})

继续,将此文件另存为 index.js 并在您的终端类型上:

node index.js

然后在浏览器上访问 localhost:3000,瞧! NodeJS 上的输出示例

当然,这还没有准备好生产,所以要小心。

总结一下,如果您仍然对 Node 感兴趣,您需要采取的步骤是:

  1. 了解 Node 的工作原理,包括其架构和最重要的事件循环
  2. 使用和滥用框架和模块。我上面给你的例子,如果你试图扩展它,由于它的设计方式会造成很多痛苦和痛苦,但它很好,你可以学习。使用框架和模块,您可以获得经过实战测试的社区贡献代码,这些代码可以让您的生活更轻松、更安全并为生产做好准备,一个很好的例子就是使用Fastify 框架创建 HTTP 服务器。
  3. 不要放弃:学习一门不同的语言确实很难,但可以给你很多市场机会,你可以从不同的角度学习很多东西,你通常最终会承认你在另一种语言上犯的错误通过观察另一个事物的运作方式。

推荐阅读