我发布了index.html
,app.js
和insert.php
的代码。
安装的依赖项是 express , mysql 和 morgan 。
在我的文件夹中我有
我在后台运行WAMP本地服务器。默认情况下,phpMyadmin的用户名为root,密码为空。我已经设置了一个名为storestuff
的数据库,其中包含一个名为thestuff
的表,其中有两列title
和content
。
所以我在终端中运行node app.js
然后得到
Server running on port 3000.
Connected successfully to the database
。
现在,我去访问 localhost:3000
页面加载时,终端会显示GET / 304 20.635 ms - -
,表示页面已正确加载。
我还使用phpMyAdmin将一些虚拟数据插入到MySQL storestuff
数据库中以进行测试。访问 localhost:3000 /加载 这是app.js
中设置的路线,终端显示GET /load 200 16.382 ms - -
在浏览器中显示一个带有JSON数据的页面,它确实是我插入的虚拟数据,http代码200表示GET请求正常工作。
当我填写title
字段和content
字段并按提交时,终端会显示我不理解的POST /insert.php 404 2.949 ms - 150
,因为insert.php
位于同一文件夹中为index.html
。
的index.html
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro">
</head>
<body>
<font face="Source Sans Pro">
<div ng-app="myApp" ng-controller="myController">
<h1> Hello world! </h1>
<form>
Title <input type="text" ng-model="title"><br>
Content <input type="text" ng-model="content"><br>
<input type="button" value="Submit" ng-click="insertdata()">
</form>
<script>
var app = angular.module('myApp', []);
app.controller('myController', function($scope, $http) {
$scope.insertdata = function() {
$http.post('insert.php', {
'title':$scope.title,
'content':$scope.content
})
.then(function(data) {
console.log("Data inserted into the MySQL database successfully.");
});
}
});
</script>
</div>
</font>
</body>
</html>
app.js
var express = require('express');
var mysql = require('mysql');
var morgan = require('morgan');
var app = express();
app.use(morgan('dev'));
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '',
database : 'storestuff'
});
connection.connect(function(error) {
if(error) console.log("Problem connecting to MySQL: " + error);
else console.log("Connected successfully to the database");
});
app.get('/', function(req, res) {
res.sendFile(__dirname + '/index.html');
});
app.get('/load', function(req, res) {
connection.query("SELECT * from thestuff", function(err, rows) {
if(err) console.log("SELECT from thestuff... did not work: " + err);
else res.end(JSON.stringify(rows));
});
});
app.listen(3000, function() {
console.log("Server running on port 3000.");
});
insert.php
<?php
$data = json.decode(file_get_content('php://input'));
$title = mysql_real_escape_string($data->title);
$content = mysql_real_escape_string($data->content);
mysql_connect('localhost', 'root', '');
mysql_select_db('storestuff');
mysql_query("INSERT INTO thestuff('title', 'content') VALUES('".$title"', '".$content"')");
?>
答案 0 :(得分:1)
将其添加到php文件的顶部
RewriteEngine on
RewriteRule ^(.*) http://server/node/myname/$1 [P]
答案 1 :(得分:1)
尝试标题属性
$http({
method: 'POST',
url: 'insert.php',
data: {'whetever':'data', 'in':'json format'},
headers: {'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'}
})
.then(function(res){
console.log('successful response', res);
.catch(function(err) {
console.error('Error while post', err);
});
您可以访问 insert.php
header("Access-Control-Allow-Origin: *");
if ($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST)) {
$_POST = json_decode(file_get_contents('php://input'), true);
echo $data->whatever;
}
注意:您还可以在.config块中为所有发布请求全局设置,如下所示
myApp.config(function($httpProvider) {
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
});
答案 2 :(得分:0)
您正在使用节点为Web服务器供电。一些事情:在您的应用程序路由中,您没有app.post('/insert.php')的路由,这是您404的原因。但是node.js本身不会为您解释php文件,所以最好它会显示php文件的代码。您可以使用插件或在express / nodejs前使用其他Web服务器,如nginx。