摘要:用nodejs作为服务器,php作为客服端进行跨域请求,并返回数据。

  一:windows环境下的nodejs安装(以及express模板的安装):http://blog.uifanr.com/2013/03/12/472

                       http://www.veryhuo.com/a/view/39756.html

  二:测试安装

    1:在cmd中输入:node -v 若出现版本号,则安装成功。

    2:在D 盘下新建一个文件  test_node.js :

 var http = require("http"); 

 http.createServer(function(request, response) { 

 response.writeHead(200, {"Content-Type": 'application/json;charset=UTF-8'}); 

 response.write("hello"); 

 response.end(); 

 }).listen(8899); 

 console.log("nodejs start listen 8899 port!");

3:在 cmd 中进入D 盘;运行  node test_node.js。 出现:  。   打开浏览器,输入   http://127.0.0.1:8899  会出现   hello

  三:PHP跨域请求 nodejs  服务:

    1: 在D盘下新建一个文件夹 node,在 cmd 中进入 D:/node/  文件夹下新建项目:

    其中 node_modules 文件夹通过node引入:  在终端进入 D:\node\nodejs-demo\ 文件夹下  npm install express ,将会在该文件夹下建立node_modules,并在

其中引入 express模板,再引入一个模板  :npm install ejs  ,将会在node_modules文件夹下引入 ejs 模板。框架大体就搭建好了。

    2:routes 文件夹下新建一个 js 文件,services.js  :

 exports.index = function (req, res) {
var params = req.params;//得到3000:后的 shows。
switch (params[0]) {
case 'shows':
shows(req, res);
break;
case 'select':
// selects(req, res);
break;
}
}; var shows = function (req, res) {
var msg = req.headers.num;//得到
var val = req.headers.val
res.setHeader('Content-Type', 'application/json;charset=UTF-8');
res.send({
'status': 1,
'data': " hellow.date: " + val,
'url': " hellow.URL: " + msg,
});
res.end();
};

  其中 req 为请求数据,req.params 得到请求的第一个参数(app.js有配置),req.headers.num  得到客户端 请求的num 参数。

3:配置 app.js  :

 var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var services = require('./routes/services');
var http = require('http');
var path = require('path'); var app = express(); // all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public'))); // development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
} app.get('/', routes.index);
app.get('/users', user.list); app.get('/service/*', services.index);
app.post('/service/*', services.index); http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});

  通过引入添加的app.js 很多都已经配置好了,只需要添加你自己的 js 文件路径:./routes/services 即是刚才新建的 js 文件。 app.get 和app.post 分别接收get传值和post传值。

在 app.get('/service/*', services.index); 中 services.index 指向 services.js 文件中的 exports.index = function (req, res){} 函数。到此,服务端就算配置好了。

  4:进入admin 文件夹中 新建 cenlent.php 文件,作为请求代理:

 <?php 

     $value = $_POST["values"];
$url = $_GET["url"]; $heads = array (
'val:' . $value,
'num:'.$url,
); //$fields = array(
// 'vals:'.'中心'
//); $ch = curl_init ();
// 设置选项,包括URL
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_HTTPHEADER, $heads);
curl_setopt ( $ch, CURLOPT_TIMEOUT, 5 ); // 定义超时5秒钟
//curl_setopt ( $ch, CURLOPT_POST, 1 ); // POST数据
//curl_setopt ( $ch, CURLOPT_POSTFIELDS, $fields ); // 把post的变量加上 $result = curl_exec ( $ch );
curl_close ( $ch );
if($result != null){
$results=array(
'status'=>1,
'data' => $result
);
}else{
$results=array(
'status'=> -1,
'info' => '服务器错误'
);
}
header ( 'Content-Type:application/json; charset=utf-8' );
echo json_encode($results);
return ;

  代码中的  $heads = array ( 'val:' . $value,'num:'.$url, );      val 和 num 即为 services.js 中的  var msg = req.headers.num; 和  var val = req.headers.val; 的请求数据。

  注:PHP 服务需要开启 php_curl.dll

    (1).打开php.ini,开启extension=php_curl.dll

      (2).检查php.ini的extension_dir值是哪个目录,检查有无php_curl.dll,没有的请下载php_curl.dll,再把php目录中的libeay32.dll,ssleay32.dll拷到c:\windows\system32里面.

    (3):关于curl_init :http://www.open-open.com/lib/view/open1408151927286.html

  5:数据请求(html)在文件夹 /AdminPHP/vew/ 下新建 html 文件 index.html:

    

 <form id="file" method="post" enctype="multipart/form-data">
    传输值:<input type="text" name="value" id="value" />
      <input type="button" value="上传" onclick="submits()"/>
</form>

构建这样一个界面: 

    javascript中的jquery的post传值:

 <script>
var conf = {
domain: 'http://127.0.0.1:3000/'
};
function submits() {
var url = conf.domain + 'service/shows';
var vals = $("#value").val();
$.post('../admin/cenlent.php?url='+ encodeURIComponent(url), {values : vals}, function (data) {
if (data.status == 1) {
datas = eval("[" + data.data + "]");
var msg = '返回数据:' + datas[0].data + ' ;请求页面:' + datas[0].url;
alert(msg);
} else {
if (data.info !== undefined) {
alert(data.info);
} else {
alert('发生未知的异常,请重试~!');
}
}
}, 'json'); return false;
}
</script>

代码中: domain: 'http://127.0.0.1:/'   为请求的服务器地址(这是在本地测试,端口号在 app.js 配置中 app.set('port', process.env.PORT || 3000);)。

       var url = conf.domain + 'service/shows'; 中 'service/shows' -- services 对应于 app.js 配置文件的 app.post('/service/*', services.index);  即向 services.index 发起请求。

  而其中的  /shows 则是对方法的请求 ,在 services.js  文件中的  var params = req.params  即得到怕rams = shows 。

  6.测试:

    (1):在 cmd 终端进入 D:\node\nodejs-demo 文件夹下,输入  : node app.js   开启服务进程。(终端会打印出 Express server listening on port 3000);

    (2):在浏览器中输入 http://127.0.0.1/****/nodejs-demo/AdminPHP/view/   运行  index.html ,即必须在服务器运行 index.html 文件。 (注意:将  node 文件夹全部复制到 本地服务器 如:apache 的根目录下,不能使用 右击 index.html 用浏览器打开)。

          如图: 

     单击上传,即可到回复 :

          

再次查看 终端:

          

  参考文件:  http://www.cnblogs.com/flyoung2008/archive/2012/07/22/2603791.html

         http://blog.uifanr.com/2013/03/12/472

         http://www.open-open.com/lib/view/open1408151927286.html

最新文章

  1. NSMutableString 常用操作
  2. 8-9 MyBatis基础课
  3. ECshop安装及报错解决方案总结
  4. Palindrome Partitioning II Leetcode
  5. Win32程序和控制台应用程序的项目互转设置
  6. 烂泥:虚拟化KVM安装与配置
  7. 基于Linux的oracle数据库管理 part4( shell管理 上 )
  8. silverlight圆球滚动
  9. [NOIP2001提高组]CODEVS1014 Car的旅行路线(最短路)
  10. kafka 0.10.2 部署失败后,重新部署
  11. 算法训练 K好数
  12. 1086. Tree Traversals Again (25)
  13. Ansible 插件 操作介绍
  14. Python3浮点型(float)运算结果不正确处理办法
  15. 微信小程序wepy开发,$apply()不能更新页面数据的情况
  16. 虹软 Android 人脸检测与人脸识别集成分享
  17. Python模块和包使用
  18. 程序设计 之 C#实现《拼图游戏》 (上)代码篇
  19. wikioi 1035 火车停留 裸费用流
  20. meta文件里指定资源

热门文章

  1. HBase基础讲解
  2. java Smaphore 控制并发线程数
  3. Oracle单列函数
  4. Oracle单行函数。。。
  5. MongoDB 3.2 在CentOS 上的安装和配置
  6. mysql配置jdbc
  7. MATLAB之数据处理+公式拟合
  8. 通过 java的 esl 连接 freeswitch
  9. Centos内核调优参考
  10. 绿盟网站安全防护服务(vWAF)