簡體   English   中英

關於如何在服務器端和客戶端執行 javascript 的困惑

[英]Confusion on how to execute javascript server-side vs client-side

我不確定我在這里問的問題是否正確。 我提前為我的無知道歉,我只花了一年的時間自學全棧 JS 和 Web 應用程序架構,我正試圖在粒度層面上理解這一點。 以前提出這個問題的嘗試似乎冒犯了一些開發人員,所以這可能是一個愚蠢的問題。

我試圖了解如何,或者如果可能的話,明確指定或分配特定文件或 javascript 塊以在服務器上與客戶端/瀏覽器上進行處理/運行/執行。

在 app.js 文件中編寫一些 javascript 並運行node app.js似乎仍然將該腳本暴露給瀏覽器,可以在 Dev Tools 的 Sources 選項卡中查看。

PHP 由服務器解釋,然后將靜態 HTML 發送到客戶端。 這是“預處理”,相當於使用 Javascript 應用程序框架進行服務器端渲染嗎? 或者是否編寫與 HTML 服務器端內聯的 .php 文件(就像您在 Wordpress 中看到的那樣)更等同於內聯 javascript 客戶端? 還有一種不同的方法可以讓 JS 在服務器端進行解釋?

我一直在閱讀有關 GENERATE_SOURCEMAP 的內容,但這似乎更像是用於隱藏客戶端 JS 模塊。

這個問題的其他可能的措辭

  • 如何不向客戶端公開服務器端 Javascript?
  • 如何在服務器和瀏覽器中運行/執行 Javascript?

不是在詢問服務器端與客戶端 JS 的定義,或者服務器端應用程序框架的建議。

再一次,我想我把自己弄糊塗了,或者遺漏了一些非常基本的東西。 也許唯一的答案是將您的私有 Web 應用程序與您的客戶端應用程序分開並通過 API 訪問。 感謝您的任何幫助。

總結:你在服務器端由節點守護進程執行的 JavaScript 在客戶端是不可見的,唯一可見的是你的 JS 的輸出。

當您創建一個帶有.php擴展名的文件時,您需要一個執行該文件的可執行文件,以將結果返回給客戶端以呈現它。

例如:

  • 使用以下語法創建一個 php 文件index.php
<?php
    echo '<script>console.log("HelloWorled")</script>'
?>

要運行此文件,您需要 PHP 守護程序(php 解釋器)來運行該文件以獲取此輸出<script>console.log("HelloWorled")</script>接下來; 輸出將返回給客戶端,在客戶端瀏覽器上執行;

在 PHP 的情況下,此操作由 http 服務器(例如 nginx)通過以下配置直接管理:

server{
   location ~ \.php$ {
     include snippets/fastcgi-php.conf;
     fastcgi_pass unix:/run/php/php<version>-fpm.sock;
   }
}

你會在/etc/nginx/sites-available/default文件中找到它

這個規則只是告訴nginx讓所有擴展名為.php的文件都經過php代理執行,然后只將執行結果返回給客戶端。

您必須想象與 nodejs 完全相同的事情。

我使用以下語法創建了一個index.js文件:

....
process.write( '<script>console.log("HelloWorled")</script>');
....

使用node index.js運行文件,您將得到輸出<script>console.log("HelloWorled")</script> ,您的服務器(例如 expressJS)將發送回客戶端以在客戶端運行它以獲取 los php代碼的相同結果。

筆記:

  • 你不需要暴露你的 JS 代碼,你只需要一個代理來服務它,就像 PHP 和 NGINX(閱讀更多關於expressJS和其他 nodejs 服務器框架)。
  • 如果您需要公開客戶端腳本、圖像、樣式,您需要在代理配置中指定它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM