【问题标题】:error: POST http://localhost:3000/api/createProductCategory 500 (Internal Server Error)错误:POST http://localhost:3000/api/createProductCategory 500(内部服务器错误)
【发布时间】:2016-07-29 14:54:00
【问题描述】:

我正在尝试使用 POST 方法将数据插入到表中,因为我有一个角度服务功能

angular.module("productCategoryModule")
.factory("productCategoryService",productCategoryService);

productCategoryService.$inject = ['$http'];

function productCategoryService($http){
    return {
        createProductCategory:function(productCategory){
            console.log("createProductCategory in service called",productCategory);
            return $http.post('/api/createProductCategory',
                {
                    categoryName:productCategory.categoryName,
                    details:productCategory.categoryDetails
                }
            );
        },
        getAllProductCategories:function(){
            return $http.get('/api/getAllProductCategory');
        }
    }
}

在服务器端我有

function productCategoryRouteConfig(app){
    this.app = app;
    this.routeTable = [];
    this.init();
}

productCategoryRouteConfig.prototype.init = function(){
    var self = this;
    this.addRoutes();
    this.processRoutes();
}

productCategoryRouteConfig.prototype.processRoutes = function(){
    var self = this;
    self.routeTable.forEach(function(route){
        if(route.requestType == 'get'){
            //console.log("requestType",route.requestType)
            self.app.get(route.requestUrl,route.callbackFunction);
        } else if(route.requestType == 'post'){
            //console.log("requestType",route.requestType);
            self.app.post(route.requestUrl,route.callbackFunction);
        } else if(route.requestType == 'delete'){

        }

    });
}

productCategoryRouteConfig.prototype.addRoutes = function(){
    var self = this;
    self.routeTable.push({
        requestType: 'get',
        requestUrl: '/createProductCategory',
        callbackFunction: function(req, res){
            res.render('createProductCategory',{title:'Create Product Category'});
        }
    });

    self.routeTable.push({
        requestType: 'post',
        requestUrl: '/api/createProductCategory',
        callbackFunction: function(req, res){
            console.log("Post called");
            //res.render('createProductCategory');
            console.log("req.body",req.body);
            var productCategoryDb = require('../database/productCategoryDb');
            // console.log("productCategoryDb post",productCategoryDb);
            // console.log("hello from createProductCategory post");
            // console.log("req.body",req.body);

            // productCategoryDb.productCategoryDb.createProductCategory(req.body, function(status){
            //  if(status)
            //      res.json(status);
            //  console.log(status);
            // });
        }
    });

    self.routeTable.push({
        requestType: 'get',
        requestUrl: '/viewProductCategory',
        callbackFunction: function(req, res){
            res.render('viewProductCategory',{title:'View Product Category'});
        }
    });

    self.routeTable.push({
        requestType: 'get',
        requestUrl: '/api/getAllProductCategory',
        callbackFunction: function(req, res){
            console.log("hello from getAllProductCategory");
            var productCategoryDb = require('../database/productCategoryDb');
            console.log("productCategoryDb",productCategoryDb);
            // productCategoryDb.productCategoryDb.getAllProductCategories(
            //  function (productCategories){
            //      console.log("productCategories",productCategories);
            //      res.json({productCategories : productCategories});
            //  }
            // );
        }
    });
}

module.exports = productCategoryRouteConfig;

当我点击客户端的按钮时出现此错误

POST http://localhost:3000/api/createProductCategory 500(内部服务器错误)

我正在使用 Node express mysql 和 angular。

我的数据库文件夹中有三个文件。

1.connectionString.js

var mysqlConnectionString = {
    connectionString:{
        host:'localhost',
        user:'root',
        password:'root',
        database:'vidzy'
    }
}

//module.exports = mysqlConnectionString;
exports.mysqlConnectionString = mysqlConnectionString;

2.connection.js

var mysql = require('mysql');
var mysqlConnectionString = require('/home/ep-3/node-express/yt_tutorial/database/connectionString.js');
var connectionStringProvider = {
    getSqlConnection:function(){
        var connection = mysql.createConnection(mysqlConnectionString.mysqlConnectionString.connectionString);

        connection.connect(function(err){
            if(err){
                throw err;
            } else{
                console.log("connection was successful");
            }
        });

        return connection;
    },
    closeSqlConnection:function(currentConnection){
        currentConnection.end(function(err){
            if(err){
                throw err;
            } else{
                console.log("Disconnected");
            }
        })
    }
}

exports.connectionStringProvider = connectionStringProvider;

3.productCategoryDb.js

var connectionProvider = require('/home/ep-3/node-express/yt_tutorial/database/connection.js');
var productCategoryDb = {

    createProductCategory : function(productCategory, onSuccessful){

        var insertStatement = 'INSERT INTO productcategory SET?';

        var category = {
            categoryName : productCategory.categoryName,
            Details : productCategory.details,
            isValid : productCategory.isValid,
            CreatedDate : new Date()
        }

        var connection = connectionProvider.connectionStringProvider.getSqlConnection();

        if(connection){

            connection.query(insertStatement, category, function(err, result){

                if(err){

                    console.log(err);
                }

                onSuccessful({status : 'Successful'});
                console.log(result); 
            });

            connectionProvider.connectionStringProvider.closeSqlConnection(connection);
        }
    },

    getAllProductCategory : function(callback){
        var connection = connectionProvider.connectionStringProvider.getSqlConnection();
        var selectStatement = 'SELECT * FROM productcategory';

        if(connection){
            connection.query(selectStatement, function(err, rows, fields){
                if(err){ through err; }
                console.log(rows);
                callback(rows);
            });
        }
    }
}

exports.productCategoryDb = productCategoryDb;

【问题讨论】:

  • 当您遇到 500 Internal Server Error 时,绝对要做的第一件事就是检查服务器的错误日志。
  • 你能确保localhost服务器正常工作吗?使用 CURL 或任何其他工具生成相同的请求,并先尝试一下。
  • @CBroe 我得到 GET /libs/bootstrap/css/bootstrap-responsive.min.css 304 9.907 ms - - GET /libs/jquery/dist/jquery.min.js 304 9.438 ms - -获取 /libs/bootstrap/js/bootstrap.min.js 304 9.309 毫秒 - - 获取 /libs/angular/angular.min.js 304 9.276 毫秒 - - 获取 /javascripts/app/productCategory/productCategoryModule.js 304 9.230 毫秒 - - GET /javascripts/app/productCategory/productCategoryController.js 200 5.135 ms - 569 GET /javascripts/app/productCategory/productCategoryService.js 200 7.232 ms - 586 GET /libs/angular/angular.min.js.map 304 0.459 ms - -帖子名为 req.body 未定义
  • 您能否通过更新您的问题来发布您的错误消息堆栈跟踪??
  • @daniel.. 我只收到问题中提到的错误。我花了一整天的时间来解决这个问题。我发现问题出在 require 函数上。该应用程序在 var productCategoryDb = require('../server/database/productCategoryDb'); 上崩溃我也试过改变这里的路径。

标签: mysql angularjs node.js express


【解决方案1】:

我遇到了同样的错误,但在我的情况下,有一个节点模块函数会为我所做的每个 POST 增加 id 并且我忘记在我的 DTO 中添加 id ..现在它可以工作了;也许这不是你的情况,因为你使用的是 mysql,但无论如何我都会发布答案,也许 some1 会通过这个帮助解决他的错误

【讨论】:

    【解决方案2】:

    你确定你已经包含了模块body-parser

    您在此处发布的代码似乎与我一直关注的教程相同。

    您的代码似乎很好,只是我不知道您在app.js 中的代码是什么样的。

    我已验证,当我注释掉模块 body-parser 时,我得到的 req.body 控制台响应为 undefined

    【讨论】:

    • body-parser 模块默认包含。
    • 调用路由应该在调用app.use(bodyparser.json())之后
    猜你喜欢
    • 2017-08-17
    • 2022-11-07
    • 2023-02-14
    • 2021-06-24
    • 1970-01-01
    • 2015-09-04
    • 2023-02-20
    • 2021-09-07
    • 2022-12-07
    相关资源
    最近更新 更多