第二章简单的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.交流群: PHP+JS聊天群

相关课文
  • JS如何防止父节点的事件运行

  • nodejs编写一个简单的http请求客户端代码demo

  • 使用Sublime Text3 开发React-Native的配置

  • 说一则为什么后端开发人员不选择node.js的原因

我要说说
网上宾友点评
1 楼 IP 103.216.43.5 的嘉宾 高兴地说 : 1589427434
6666666666666666