1 折腾 php nodejs 到一起

nodejs当然很火,就像着火了一样,但是必须承认要搭建一个前端的demo开发环境还是PHP靠谱, windows下可以非常的集成套件,比如http://www.apachefriends.org/zhcn/xampp.html, PHP语言本身就是一个强大的模板,写demo时,共用头尾,可以通过include和require引入,可以内嵌 循环生成一些dom结构,相较而言,node还是不那么方便的。

既然PHP已经那么方便了,可是为什么还是要跟node一起用呢,真的有点为了用而用了……

2 how?

如你安装了Python,可以立马执行一个简单的命令,一个简便的开发服务器就完成了。

python -m SimpleHTTPServer

但是PHP,直到php5.4才支持类似的功能

$ php -S 0.0.0.0:8000
PHP 5.4.0 Development Server started at Tue Aug 21 23:21:50 2012
Listening on 0.0.0.0:8000
Document root is /home/tom
Press Ctrl-C to quit.

php本身就可以架一个服务器,Nodejs也可以架一个服务器,那么就不用啥apache啦,nginx啦

基本思路就是Node开启一个服务器作为前台,监听80端口,类似Apache的角色,php开启一个服务器在后台运行。 Node服务将http请求转发给php服务器执行,执行完成后返回给node服务器,node服务器再返回给浏览器

Node承担的是一个中间的代理角色

var fs = require('fs'),
    http = require('http'),
    spawn = require('child_process').spawn,
    phpserver;

phpserver = spawn('php',['-S','0.0.0.0:8000']);
phpserver.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});
phpserver.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});
phpserver.on('exit', function (code) {
  console.log('child process exited with code ' + code);
});

process.on('exit',function(){
  phpserver.kill('SIGHUP');
});

function handleRequest(request, response) {
  var headers = {};

  for(var x in request.headers){
    headers[x] = request.headers[x];
  }

  headers['Content-Type']= 'application/x-www-form-urlencoded';

  var proxy_request = http.request({
    host:'localhost',
    port:8000,
    method:request.method,
    path:request.url,
    headers:headers
  });

  proxy_request.on('response', function (proxy_response) {
    response.writeHead(proxy_response.statusCode,proxy_response.headers);
    proxy_response.on('data', function(chunk) {
      response.write(new Buffer(chunk));
    });
    proxy_response.on('end', function() {
      response.end();
    });

  });

  request.on('data', function(chunk) {
    proxy_request.write(new Buffer(chunk));
  });

  request.on('end', function() {
    proxy_request.end();
  });
}
http.createServer(handleRequest).listen(80);

保存上面的文件为server.js然后在命令行里执行

node server.js

一个node和php混搭的服务器就搭建成功了

3 注意点

 

3.1 请求和响应数据须是Buffer对象

response.write(new Buffer(chunk))
proxy_request.write(new Buffer(chunk));

3.2 要想传递表单数据,需要在header设置

headers['Content-Type']= 'application/x-www-form-urlencoded';

Author: tom

Date: 2012-08-21 23:44:28 CST

HTML generated by org-mode 6.33x in emacs 23

php和NodeJs共存的开发环境的更多相关文章

  1. nodejs 代理 解决开发环境跨域问题

    前后端分离项目中,会遇到跨域问题.解决方法无非就是jsonp cors等. 本次项目前端不搭node服务,线上用nginx搭站点,nginx转发ajax请求server. 本地开发环境的跨域问题用no ...

  2. Windows下搭建NodeJS绿色版开发环境

    文章最初发布于szhshp的第三边境研究所, 转载请注明 开发背景 博客一直用的是Jekyll, 突然想玩玩NodeJS和Hexo, 于是就试着搭建一下 绿色环境, 基于Window8, 不需要管理员 ...

  3. 配置同时使用 Gitlab、Github、Gitee(码云) 共存的开发环境

    首先确认已安装Git,可以通过 git –version 命令可以查看当前安装的版本. Mac OSX 中都已经安装了Git.但是,Git的版本未必是最新的. 可以通过命令 git clone htt ...

  4. Mac打造python2 python3开发环境

    最新版的MacOS Sierra默认带的python环境仍然为2.7.10,本文将介绍使用Brew安装python3.5并做简单的配置,打造python2,python3共存的开发环境 直接尝试bre ...

  5. Linux服务器oraclejdk与openjdk共存并配置JavaEE开发环境

    由于本人学业的需要,需要在linux中搭建JavaEE开发环境,与windows的同学协同开发. JDK 由于fedora默认使用openjdk,移除多多少少会出现点问题,由于很多开源软件默认使用到它 ...

  6. Win7搭建NodeJs开发环境以及HelloWorld展示—图解

    Windows 7系统下搭建NodeJs开发环境(NodeJs+WebStrom)以及Hello World!展示,大体思路如下:第一步:安装NodeJs运行环境.第二步:安装WebStrom开发工具 ...

  7. windows下的Nodejs及npm的安装、常用命令,Nodejs开发环境配置

    http://www.cnblogs.com/webstorm/p/5744942.html ***************************************** 第一步:下载Nodej ...

  8. Nodejs学习笔记(一)--- 简介及安装Node.js开发环境

    目录 学习资料 简介 安装Node.js npm简介 开发工具 Sublime Node.js开发环境配置 扩展:安装多版本管理器 学习资料 1.深入浅出Node.js http://www.info ...

  9. CentOS 7快速搭建Nodejs开发环境

    Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好.学习Nodejs首先需要会安装环境.这里我介绍如 ...

随机推荐

  1. Python介绍以及安装

    Python介绍以及安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 借用我的导师的一句话:当你看到这篇文章的时候,那么恭喜你,你已经是踏入了开发的大门!欢迎加入:高级运维工程师 ...

  2. 设计模式---单一职责模式之桥模式(Bridge)

    一:概念 Bridge模式又叫做桥接模式,其实基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任他的主要特点是吧抽象与行为实现分离开来,从而可以保持各部分的独立性以及一对 ...

  3. javascript 模拟京东关闭广告栏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. CodeForces - 615D Multipliers(数论)

    http://codeforces.com/problemset/problem/615/D 题意 给出m个质因子,组成一个数n.问n的约数的乘积是多少,输出mod 1e+7的结果. 分析 从输入我们 ...

  5. plt.scatter(X[0, :], X[1, :], c=Y, s=40, cmap=plt.cm.Spectral)出错

    ValueError: c of shape (1, 400) not acceptable as a color sequence for x with size 400, y with size ...

  6. Oracle语句优先级

    SQL> SELECT SAL SALARY FROM EMP WHERE SALARY<2500;Warning: connection was lost and re-establis ...

  7. 求幂运算、多项式乘法及Horner法则的应用

    一,两种不同的求幂运算 求解x^n(x 的 n 次方) ①使用递归,代码如下: private static long pow(int x, int n){ if(n == 0) return 1; ...

  8. Jacob用法收集

    介绍 Jacob 是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调 ...

  9. luogu P2123 皇后游戏

    传送门 跟国王游戏一样的分析 考虑相邻的两个大臣,设他们前面的\(\sum a_j\)为\(s\),同时注意到后面人的贡献更大 所以\(i\)在前面时,\(c_j=\max(\max(c_{last} ...

  10. vue插件开发实践与要点

    其实就跟组件差不多意思,组件也可以实现相关的效果,但要在用到的地方都引用插件就可以全局注册,不需引用 试着撸一个插件,有2个功能,提示和对话框 网上找了个toast插件的代码,改了改,扩展加了个dia ...