2013-04-30 154 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!");