2013-04-30 461 views
2

我正在使用wamp服务器和node.js来运行我的应用程序(server.js),但是当我想执行.php脚本时,我总是收到一个错误: POST http://localhost:8080/login.php 404 (Not Found)如何在node.js上运行.php脚本

server.js

var app = require('express')(); 
var server = require('http').createServer(app); 
var webRTC = require('webrtc.io').listen(server); 
var exec = require("child_process").exec; 

var port = process.env.PORT || 8080; 
server.listen(port); 

app.get('/', function(req, res){ 
    res.sendfile(__dirname + '/index.html'); 
}); 

app.get('/login.php', function(req, res){ 
exec("wget -q -O - http://localhost/login.php", function (error, stdout, stderr) {res.send(stdout);});}); 
的index.html调用的login.php

$("#login").click(function(){ 
    username=$("#user_name").val(); 
    password=$("#password").val(); 
    $.ajax({ 
     type: "POST", 
     url: "login.php", 
     data: "name="+username+"&pwd="+password, 
     success: function(html) 
       {...... 

我想问,需要安装另一个工具还是其他的东西?

谢谢。

+0

你有没有试过做app.post而不是得到?你的表单正在发送一个http文章。 – booyaa 2013-04-30 12:22:56

+0

我尝试测试下面的代码: 'http:// tutsforweb.blogspot.sk/search/label/ajax' – Patrik18 2013-04-30 17:03:10

回答

6

Node.js不会执行你的PHP代码,Apache服务器会。 据我了解你的问题,你有一个Apache服务器监听端口80和一个Node.js服务器监听8080,你希望Node.js服务的HTML页面在Apache服务的login.php上执行一个Ajax post。如果这个断言是真的,那么问题是你的Ajax请求指向localhost:8080而不是localhost:80。

您必须提供Ajax请求参数的绝对URL才能正确指向Apache服务器(端口80),并提供一个相对URL,因为您现在将执行相应的URL,以执行对localhost:8080的请求,这是您的Node。 js服务器。

所以,替换:

$.ajax({ 
    type: "POST", 
    url: "login.php", 
    data: "name="+username+"&pwd="+password, 

通过

$.ajax({ 
    type: "POST", 
    url: "http://localhost:80/login.php", 
    data: "name="+username+"&pwd="+password, 

应该做的伎俩。

你肯定想从实际的网页服务器地址,你可以在JavaScript中这样做:

$.ajax({ 
    type: "POST", 
    url: window.location.href.replace(/^(https?:\/\/[^\/]+/,'$1:80/') + "login.php", 
    data: "name="+username+"&pwd="+password, 
+1

实际上,现在我得到一个错误: 'XMLHttpRequest无法加载http://localhost/login.php。访问控制 - 允许来源不允许访问http:// localhost:8080. – Patrik18 2013-04-30 16:45:06

+0

您现在要检查访问控制策略头https://developer.mozilla.org/zh-CN/docs/HTTP/Access_control_CORS您的Apache Web服务器必须返回良好的标头以允许跨域请求 – malko 2013-04-30 17:07:03

1

要安装到的Node.js:

npm install node-php 

使用

要使用Node.js和Express运行WordPress,请执行以下操作:

var express = require('express'); 
var php = require("php"); 
var path = require("path"); 

var app = express(); 

app.use("/", php.cgi("/path/to/wordpress")); 

app.listen(9090); 

console.log("Server listening!");