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


How to run .php script on node.js

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

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

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

谢谢。

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

你必须给Ajax请求参数一个绝对URL,以正确指向Apache服务器(端口80),给一个相对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,

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

你需要使用对应于HTTP方法的Express methods app object来定义路由。

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')
})