php和NodeJs共存的开发环境
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共存的开发环境的更多相关文章
- nodejs 代理 解决开发环境跨域问题
前后端分离项目中,会遇到跨域问题.解决方法无非就是jsonp cors等. 本次项目前端不搭node服务,线上用nginx搭站点,nginx转发ajax请求server. 本地开发环境的跨域问题用no ...
- Windows下搭建NodeJS绿色版开发环境
文章最初发布于szhshp的第三边境研究所, 转载请注明 开发背景 博客一直用的是Jekyll, 突然想玩玩NodeJS和Hexo, 于是就试着搭建一下 绿色环境, 基于Window8, 不需要管理员 ...
- 配置同时使用 Gitlab、Github、Gitee(码云) 共存的开发环境
首先确认已安装Git,可以通过 git –version 命令可以查看当前安装的版本. Mac OSX 中都已经安装了Git.但是,Git的版本未必是最新的. 可以通过命令 git clone htt ...
- Mac打造python2 python3开发环境
最新版的MacOS Sierra默认带的python环境仍然为2.7.10,本文将介绍使用Brew安装python3.5并做简单的配置,打造python2,python3共存的开发环境 直接尝试bre ...
- Linux服务器oraclejdk与openjdk共存并配置JavaEE开发环境
由于本人学业的需要,需要在linux中搭建JavaEE开发环境,与windows的同学协同开发. JDK 由于fedora默认使用openjdk,移除多多少少会出现点问题,由于很多开源软件默认使用到它 ...
- Win7搭建NodeJs开发环境以及HelloWorld展示—图解
Windows 7系统下搭建NodeJs开发环境(NodeJs+WebStrom)以及Hello World!展示,大体思路如下:第一步:安装NodeJs运行环境.第二步:安装WebStrom开发工具 ...
- windows下的Nodejs及npm的安装、常用命令,Nodejs开发环境配置
http://www.cnblogs.com/webstorm/p/5744942.html ***************************************** 第一步:下载Nodej ...
- Nodejs学习笔记(一)--- 简介及安装Node.js开发环境
目录 学习资料 简介 安装Node.js npm简介 开发工具 Sublime Node.js开发环境配置 扩展:安装多版本管理器 学习资料 1.深入浅出Node.js http://www.info ...
- CentOS 7快速搭建Nodejs开发环境
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好.学习Nodejs首先需要会安装环境.这里我介绍如 ...
随机推荐
- (Java)入门训练 斐波那契数列
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...
- H5 手机拨打电话与转到邮箱的标签属性
<a href="tel:电话号码"></a> <a href-"mailto:邮箱"></a> 说明:第一个标 ...
- WCF开发实战系列一:创建第一个WCF服务
WCF开发实战系列一:创建第一个WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 在这个实战中我们将使用DataContract,ServiceContract ...
- git log 查看提交记录,参数:
git log 查看提交记录,参数:-n (n是一个正整数),查看最近n次的提交信息 $ git log -2 查看最近2次的提交历史记录 -- fileName fileName为任意文件名,查看指 ...
- js变量浅谈
js变量是除了this以外最让人恶心的东西了,还因为烂语法造成各种各样奇奇怪怪的事情发生,下面让我们来谈谈都有什么奇怪的事: 1.用var与不用var function test(){ a = 123 ...
- golang struct tag
golang可以在struct中的每个字段,写上一个tag.这个tag可以通过反射的机制获取到,最常用的场景就是json序列化和反序列化 package main import ( "enc ...
- Java Web之路(五)JSP
一.jsp的3个指令 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: p ...
- C# PointToScreen
子窗体定位时,如果主窗口不在左上角,需要根据主窗口的坐标,相减才行. Point p1 = Label.PointToScreen(new Point(0, 0)); p1.X -= this.X; ...
- 无线DOS攻击
1.无线连接状态 IEEE 802.11定义了一种客户端状态机制,用于跟踪工作站身份验证和关联状态.无线客户端和AP基于IEEE标准实现这种状态机制.成功关联的客户站停留在状态3,才能进行无线通信.处 ...
- QPushButton按钮
需要 from PyQt5.QtWidgets import QPushButton继承 QAbstractButton 创建按钮控件:QPushButton() 创建一个无父控件的按钮控件QPush ...