javascript - 无法使用 Node.js 处理 PHP 文件

标签 javascript php node.js

我有一个在 Heroku 服务器上运行的 Node.js Web 应用程序。我的 javascript 中有一个 AJAX 请求,它将 GET 请求发送到服务器上的 PHP 文件。该请求工作正常,事实上,如果我在没有任何 Node.js 而只是 PHP Web 应用程序的情况下运行它,它会完美地工作,所以我想知道当我从 index.js 文件和 Node 开始时会发生什么变化index.php 文件和 apache。为了解决这个问题,我将整个根目录设置为公共(public)文件夹。

我的index.js文件如下:

var path = require('path');
var express = require('express');
var app = express();
var router = express.Router();
var phpExpress = require('php-express')({
    binPath: 'php'
});
var bodyParser = require('body-parser');
app.use(bodyParser.json());

app.set('port', (process.env.PORT || 5000));

app.use('/', express.static(__dirname));

app.set('views', path.join(__dirname, '/views'));
app.engine('php', phpExpress.engine);
app.set('view engine', 'php');

app.all(/.+\.php$/, phpExpress.router);

// Homepage (THIS IS NOT WHAT ISN'T WORKING)
router.get('/', function(req, res, next){
    res.render('index.php');
});
app.use('/', router);

app.use(function (req, res, next) {
    res.status(404).send("Sorry can't find that!")
});

app.listen(app.get('port'), function() {
    console.log('Node app is running on port', app.get('port'));
});

在我的浏览器 JavaScript 中,我有一个简单的 GET 请求,如下所示:

let xhttp = new XMLHttpRequest();
// THIS RETURNS THE ENTIRE CONTENTS OF THE PHP FILE, IT IS NOT PROCESSED
xhttp.open('GET', 'folder/file.php?name=' + $name, true);
xhttp.send();

如果我不使用 Node.js,但使用 Node.js 返回 file.php 的内容,则效果很好。 Chrome 尝试下载该文件。

我以前从未使用过 PHP,而且我只制作了一个在服务器上专门使用 JS 的 Node.js Web 应用程序,因此很可能我的 index.js 没有针对 PHP 进行适当配置和/或我'我的根目录中缺少一些其他重要文件;如果我可以提供更多信息,请告诉我。

到底是什么原因导致的呢?任何帮助或建议将不胜感激,谢谢:)

添加:

我添加这个示例是为了更清楚:

我的服务器上有一个 php 文件,file.php

<?php
    $name = $_GET['name'];
    echo $name;
?>

我有一个要在浏览器中运行的js文件,main.js

let xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
        console.log(this.responseText);
    }
}
xhttp.open('GET', 'folder/file.php?name=jerry', true);
xhttp.send();

当该 js 文件运行时,它会记录:

<?php
    $name = $_GET['name'];
    echo $name;
?>

但我希望它记录:

jerry

最佳答案

您应该将 php 文件夹和文件放入 views 文件夹中,因为您将模板引擎路径设置为 /views 这意味着您应该拥有 file.php /views/folder/file.php

这是我的应用程序结构

├── app.js
├── package.json
└── views
    └── folder
        └── file.php

我的app.js

var path = require('path');
var express = require('express');
var app = express();
var router = express.Router();
var phpExpress = require('php-express')({
    binPath: 'php'
});
var bodyParser = require('body-parser');
app.use(bodyParser.json());

app.set('port', (process.env.PORT || 5000));

app.use('/', express.static(__dirname));

app.set('views', path.join(__dirname, '/views'));
app.engine('php', phpExpress.engine);
app.set('view engine', 'php');

app.all(/.+\.php$/, phpExpress.router);

app.use(function (req, res, next) {
    res.status(404).send("Sorry can't find that!")
});

app.listen(app.get('port'), function() {
    console.log('Node app is running on port', app.get('port'));
});

file.php与你的相同

<?php
    $name = $_GET['name'];
    echo $name;
?>

你可以看到你不需要自己渲染php文件,因为phpExpress.router会处理所有带有.php扩展名的路由并尝试在 views 文件夹中找到这些文件。

关于javascript - 无法使用 Node.js 处理 PHP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43824678/

相关文章:

javascript - ionic 深度链接

javascript - 如何将 momentjs 添加到缩小的 bundle 文件中?

php - 对创建的每个文件夹设置 777 权限

node.js - 如何从本地文件夹中获取 React 组件,而无需从全局安装的 Node 应用程序中获取 node_modules?

javascript - 接受图像数据的NodeJS静态文件服务器

sql - 使用node js对SQL Server中的大量记录运行create或update

javascript - 与Jquery不同,屏幕宽度为1050px时移除class

javascript - 在 extjs 项目中使用 Moment.js

php - 将两个查询的 MySQL 结果存储在 PHP 数组中

javascript - 为什么下面的 onclick 函数没有执行?