如何在Node.js上运行.php脚本

3

我正在使用wamp服务器和node.js运行我的应用程序(server.js),但是当我想要执行.php脚本时,总是会出现错误:

POST http://localhost:8080/login.php 404 (未找到)

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)
               {......

我想问一下,需要安装其他工具或其他东西吗?

谢谢。


你尝试过使用app.post而不是get吗?你的表单正在发送HTTP POST请求。 - booyaa
我尝试测试这段代码: http://tutsforweb.blogspot.sk/search/label/ajax - Patrik18
3个回答

8
Node.js不会执行你的PHP代码,Apache服务器会执行。 根据我的理解,你在端口80上有一个监听的Apache服务器和在8080上监听的Node.js服务器。你想让由Node.js提供的HTML页面对由Apache提供的login.php进行Ajax提交。如果这个假设是正确的,那么问题就在于你的Ajax请求指向了localhost:8080而不是localhost:80。 你必须给Ajax请求参数一个绝对URL,以正确地指向Apache服务器(端口80)。像你现在所做的这样给出相对URL将会把请求发送到你的Node.js服务器localhost:8080。 因此,替换为:
$.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。Origin http://localhost:8080未被Access-Control-Allow-Origin允许。 - Patrik18
现在您需要检查Access-Control策略头 https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS 您的Apache Web服务器必须返回良好的头以允许跨域请求。 - malko

2

安装到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!");

0

您需要使用Express方法的app对象来定义路由,这些方法对应于HTTP方法。

var express = require('express')
var app = express()

// respond with "hello world" when a GET request is made to the homepage
app.get('/', function (req, res) {
  res.send('hello world')
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接