gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:23:44 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com