我有一个在 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/