第二章簡單的Node.js框架——2.3 一個PHP示例頁面

字號+ 編輯: Snake 修訂: 小红帽 來源: 《写给PHP开发者的Node.js学习指南》 2023-09-11 我要說兩句(1)

page()函數就是頁面本身。從廣義上講,這個過程就是將 PHP 文档中的 PHP 代碼複制到page()函數中。然後將page()函數中的PHP 代碼轉換成Node.js 代碼。當page() 函數中只有 Node.js 代碼並且複制過來的 PHP 代碼一點不剩的時候,page()函數就會和 PHP 代碼的行爲完全相同,除了它是 Node.js 而不是 PHP。

下面將會展示一個簡單的轉換示例。

假設現在你有一個簡單的 showx5.php 頁面,它同時包含 PHP 和HTML:

<?php
  $x = $_REQUEST['x'];
  $x += 5;
?>
<html><head></head><body>
The value of x plus 5 is <?php echo $x; ?>.
</body></html>

首先,把 PHP 代碼拷貝並粘貼到 page()函數中,這會産生比較奇怪的,沒有功能的 PHP/Node.js 混合代碼:

function page(req,res,pre,cb){
  var content = '';
  <?php
    $x = $_REQUEST['x'];
    $x += 5;
  ?>
  <html><head></head><body>
  The value of x plus 5 is <?php echo $x; ?>.
  </body></html>
  res.writeHead(200,{'Content-Type':'text/html'});
  res.end(content);
  cb();
}

接下來,轉換第一個 PHP 代碼模塊。這裡是轉換前的片段:

<?php
  $x = $_REQUEST['x'];
  $x += 5;
?>

轉換之後,它看起來仍然非常簡單,除了現在它已經是 Node.js 代碼了:

var x = parseInt(pre._REQUEST['x']);
x += 5;

然後,剩下的 HTML 代碼也會被轉換:

<html><head></head><body>
  The value of x plus 5 is <?php echo $x; ?>.
  </body></html>

它對應的 Node.js 代碼頁非常簡單:

content += '<htnl><head></head><body>';
content += 'The value of x plus 5 is '+x+'.';
content += '</body></html>';

下面是 showx5.njs 中完全轉換好的 page()函數,它實現了 showx5.php 一樣的功能:

function page(req,res,pre,cb){
  var content ='';
  var x = parseInt(pre._RESUEST['x']);
  x += 5;
  content += '<htnl><head></head><body>';
  content += 'The value of x plus 5 is '+x+'.';
  content += '</body></html>'; 
  res.writeHead(200,{'Content-Type':'text/html'});
  res.end(content);
  cb();
}

下面是完整的 showx5.njs 文档:

var initreq = require('./initreq.njs');
exports.serve = function(req,res){
  var pre = {};
  initreq.initGET(req,pre,function(){
    initreq.initPOST(req,pre,function(){
      initreq.initCOOKIE(req,pre,function(){
        initreq.initGREQUEST(req,pre,function(){
          initreq.initSESSION(req,pre,function(){
            page(req,pre,function(){
              var cookies = [];
              for (var c in pre._COOKIE){
                cookies.push(c + '=' + pre._COOKIE[c]);
              }
              res.setHeader('Set-Cookie',cookies);
              res.writeHead(200,{'Content-
Type':'text/html'});
              res.end(res.content);
            });
          });
        });
      });
    });
  });
};
function page(req,res,pre,cb){
  var content ='';
  var x = parseInt(pre._RESUEST['x']);
  x += 5;
  content += '<htnl><head></head><body>';
  content += 'The value of x plus 5 is '+x+'.';
  content += '</body></html>'; 
  res.writeHead(200,{'Content-Type':'text/html'});
  res.end(content);
  cb();
}

然後修改 httpsvr.njs 文档,將 showx5.php URL 指定到 showx5.njs 本地模塊:

var http = require('http');
var static = require('node-static');
var file = new static.Server();
var url = require('url');
var showx5 = require('./showx5.njs');
http.createServer(cunction(req,res){
  if(url.parse(req,res).pathname == '/showx5.php'){
    showx5.serve(req,res);
  } else{
    file.serve(req,res);
  }
}).listen(1337,'127.0.0.1');
console.log('Server running at htto://127.0.0.1:1337/');

假如你將 httpsvr.njs、initreq.njs 和 showx5.njs 文档放到同一個目錄下並且運行Node.js 服務器,那麽 PHP 和 Node.js 代碼執行效果都一樣。使用客戶耑如瀏覽器去訪問下面的 URL 會得到一樣的結果:

http://localhost/showx5.php?x=22
http://localhost:1337/showx5.php?x=22

第一個 URL 會請求 PHP 服務器。第二個 URL 會請求與之相同的 Node.js Web服務器。

雖然 showx5 示例是微不足道的,但是它演示了三件事情:

你有一個用來將 PHP 轉換到 Node.js 的開發環境。

你有一個 Node.js 框架來支持每一個 PHP 頁面到 Node.js 的轉換。

你可以很容易地把瑣碎的 PHP 頁面轉換成 Node.js。

在可以將瑣碎的 PHP 頁面轉換成 Node.js 後,本書剩下章節將關注於如何轉換那些複雜的,真實世界中的 PHP 頁面。在下一章中,我們將討論回調函數以及代碼線性的概念,將會展示如何在將 PHP 代碼粘貼到 page()函數之前進行重構以利於之後更容易地轉換成 Node.js。

閲完此文,您的感想如何?
  • 有用

    1

  • 沒用

    1

  • 開心

    1

  • 憤怒

    1

  • 可憐

    1

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • JS如何防止父節點的事件運行

  • nodejs編寫一個簡單的http請求客戶耑代碼demo

  • 說一則爲什麽後耑開發人員不選擇node.js的原因

  • 使用Sublime Text3 開發React-Native的配置

我要說說
網上賓友點評
1 樓 IP 103.216.***.5 的嘉賓 高兴地说 : 很久前
6666666666666666