簡體   English   中英

Nodejs,Express + Angular POST 404

[英]Nodejs, Express + Angular POST 404

我正在研究我的MEAN堆棧(mySQL而不是MongoDB,我也在使用EJS模板引擎)應用程序,我遇到了將數據發布到MySQL數據庫的問題。 正如標題所示,我在控制台中收到“404”錯誤,我認為這表明無法找到post方法。 如果我把方法推到服務器文件中,帖子確實有用,但我收到一條消息“無效的json”。

任何人都有任何關於為什么會發生這種情況的想法?

我目前的代碼如下所示。 我是這方面的初學者所以我非常感謝很好地解釋了答案,因為這是了解它出錯的最佳方式。

服務器/應用程序:

> var express = require('express'); var path = require('path'); //var
> favicon = require('serve-favicon'); var logger = require('morgan');
> var cookieParser = require('cookie-parser'); var bodyParser =
> require('body-parser'); var http = require('http');
> 
> var mysql = require('mysql');
> 
> var app = express();
> 
> var port = 1337;
> 
> // view engine setup app.set('views', path.join(__dirname, 'views'));
> app.set('view engine', 'ejs');
> 
> // uncomment after placing your favicon in /public
> //app.use(favicon(__dirname + '/public/favicon.ico'));
> app.use(logger('dev')); app.use(bodyParser.json());
> app.use(bodyParser.urlencoded({ extended: false }));
> app.use(cookieParser());
> app.use(require('stylus').middleware(path.join(__dirname, 'public')));
> app.use(express.static(path.join(__dirname, 'public')));
> app.use('/bower_components', express.static(__dirname +
> '/bower_components'));
> 
> var clientRoute = require('./routes/clientConfig.js');
> 
> new clientRoute(app);
> 
> app.use(require('./server/Dao/clientDao.js'));
> 
> module.exports = app;
> 
> app.set('port', process.env.PORT || 1337);
> http.createServer(app).listen(app.get('port'), function () {
>     console.log('Express server listening on port ' + app.get('port')); });

角度控制器:

> var clientModule = angular.module('clientModule', []);
> 
> clientModule.controller('clientController', ['$scope', '$http',
> function ($scope, $http) {
>     console.log("Hello world from controller");
>     
>     $scope.addClient = function () {
>         console.log($scope.client);
>         
>         $http.post('/createClient', $scope.client).success(function(response) {
>             console.log(response);
>         })
>     } }]);

服務器端的帖子(我不知道,但似乎它不能很好地引用我的服務器文件夾):

>  var express = require('express'); var router = express.Router(); var
> connectionProvider = require('../mysqlConnectionStringProvider.js');
> 
> router.post('/createClient', function (req, res) {
>     console.log(req.body); 
>     
>     var connection = connectionProvider.mysqlConnectionStringProvider.getMySqlConnection();
> 
>     var insertStatement = "INSERT INTO Clients SET?"
>     
>     var client = { 
>         clientName : req.body.client.clientName, // this should be req.body.client.clientName 
>         clientAddress : req.body.client.clientAddress // this should be req.body.client.clientAddress 
>     }
> 
>      
>     if (connection) {
>         connection.query(insertStatement, client, function (err, result) {
> 
>             if (err) {
>                 console.log(err);
>             }
> 
>             //console.log(result);
>         });
>     }
>     connectionProvider.mysqlConnectionStringProvider.closeMySqlConnection(connection);
> });
> 
> router.get('/createClient', function (req, res) {
>     
>     res.render('clients/createClient.ejs', {title : 'Add client'}); }) 
> 
> module.exports = router;

HTML:

 <% include ../layout %> <div class="container" ng-app="clientModule" ng-controller="clientController"> <form class="navbar-form navbar-left" action="/createClient" method="post" name="formClient"> <div class="row"> <div class="form-group"> <label for="">Client name</label> <input type="text" class="form-control" placeholder="Please enter client name" name="clientName" ng-model="client.clientName" style="width: 100%" required> </div> </div> <div>&nbsp;</div> <div class="row"> <div class="form-group"> <label for="">Client address</label> <input type="text" class="form-control" placeholder="Please enter client address" name="clientName" ng-model="client.clientAddress" style="width: 100%" required> <p>{{client.clientAddress}}</p> </div> </div> <div>&nbsp;</div> <div class="row"> <div class="form-group"> <button class="btn btn-primary" ng-click="addClient()">Create client</button> </div> </div> </form> </div> <script src="./controllers/clients/clientController.js"></script> 

提前致謝!

要使用其他文件中的路由,您可以執行以下操作

路線/ clientConfig.js

var express = require('express');
var router = express.Router();

router.get(...); 
router.post(...); 
router.put(...); 

module.exports = router;

server.js

...
app.use(require('./routes/clientConfig.js'));
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM