尝试使用角度Js发布产品时出现内部服务器错误(MEAN堆栈)

时间:2017-05-16 23:32:59

标签: angularjs node.js mongodb express

我真的需要一些帮助。当我尝试通过角度js中的http服务($ http.post)添加产品时,我面临内部服务器错误。所以基本上,你需要帮助我摆脱这种挫败感的文件是:

** index.js:这里我定义了我的快递服务器的api路由

var express = require('express'); 
var router = express.Router(); 
var productCtrl = require('../controllers/productCtrl'); 

router.get('/products', productCtrl.getAllProducts); 
router.get('/products/:productId', productCtrl.readProduct); 
router.post('/products', productCtrl.createProduct); 
router.delete('/products/:productId', productCtrl.removeProduct); 
router.put('/products/:productId', productCtrl.updateProduct); 

module.exports = router; 

** product.js:产品型号

var mongoose = require('mongoose'); 

var productSchema = new mongoose.Schema({
  name: {type: String, required: true}, 
  category: {type: String, default: ''}, 
  price: { type: Number, default: 0}, 
  picture: String, 
  pictures: [String], 
  quantity: {type: Number, default: 0}, 
  status: { 
    type: String, 
    enum: ['Pending', 'In Progress', 'Cancelled', 'Done'], 
    default: 'Pending' 
 }, 
   date: { type: Date, default: Date.now}, 
   description: { type: String}, 
   owner: {type: String}
 }); 

 var Product = mongoose.model('Product', productSchema); 

 module.exports = Product; 

** productCtrl.js:我在Express Server上的控制器,我在其中构建了一个rest API

var Product = require('../models/product'); 

var sendJsonResponse = function (res, status, content ){
   res.status(status); 
   res.json(content); 
}

 /* some other code here, but i will only show create action */ 
 module.exports.createProduct = function (req, res){
  Product
      .create({
        name: req.body.name, 
        category: req.body.category, 
        price: req.body.price, 
        picture: req.body.picture, 
        pictures: req.body.pictures.split(", "), 
        quantity: req.body.quantity,
        status: req.body.status, 
        date: req.body.date, 
        description: req.body.description, 
        owner: req.body.owner

      }, function createProduct(err, product){
        if(err){
            sendJsonResponse(res, 404, err); 
            return; 
        }
        else {
            sendJsonResponse(res, 201, product); 
        }
      });
 }

最后在我的角度模块脚本文件中:app.js

(function(){ 
   var app = angular.module('ecommerce', []); 

   app.controller('ProductController', 
   ['$scope','$http', function ($scope, $http){
    console.log('Welcome to the ProductController'); 
     /* some other code here */

    $scope.addProduct = function (){ 

        var newProduct = {
                    name: $scope.product.name, 
                    category: $scope.product.category, 
                    price: $scope.product.price, 
                    picture: $scope.product.picture, 
                    pictures: [], 
                    quantity: 10,  
                    status: "Pending", 
                    date: Date.now(), 
                    description: $scope.product.description, 
                    owner: "Joel Alexandre Khang Zulbal"
        }; 

        console.log(newProduct); 
        alert("Passing variable..."); 

        $http.post('/api/products', newProduct)
             .then( function onSuccessCallback(){
                    $scope.products.push($scope.product); 
                        alert("Success Insertion"); 
                        $scope.$apply(); 
                 }, function onErrorCallback (error){
                        console.log(error); 
                        alert("Insertion failed!!"); 
                 }); 

            $scope.product = {}; 
            $scope.close(); 
    }
    /* some other code here */

}]); 

})()

还有我的入门服务器点:app.js

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 routes = require('./routes/index');
var api = require('./app_api/routes/index'); 
var users = require('./routes/users');
require('./app_api/models/database.js'); 

var app = express();

// 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(path.join(__dirname, 'public', 'favicon.ico')));

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/api', api); 
app.use('/users', users);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});

 // error handlers

 // development error handler
 // will print stacktrace
 if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
  message: err.message,
  error: err
  });
 });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
   res.status(err.status || 500);
   res.render('error', {
   message: err.message,
   error: {}
  });
});


 module.exports = app;

我真的不知道我在这里做错了什么!所以请伙计们帮帮我

1 个答案:

答案 0 :(得分:0)

当您想拥有多个单独的应用程序时使用

express.Router,例如一个处理/users/get/1/users/list的路由器,另一个处理/products/get/1和{{{ 1}}。

在您的情况下,您可以跳过使用/products/list。根据你所展示的内容,它会使事情过于复杂。试试这个:

express.Router