1

Я довольно новичок в стеке javascript и пытаюсь получить сообщение формы от углового до монго. Я могу получить список назад, но не могу опубликовать его.Проводка данных от AngularJS с помощью Express, узла и отдыха

Код ниже перечислены в порядке, но когда я отправляю, он отправляет пустую запись (и, кроме того, он держит размещение каждые несколько минут, даже если я не делать какие-либо действия на странице)

я могу что его способ вызова метода на стороне сервера, но данные не передаются в сторону сохранения.

Я знаю, что я делаю что-то глупое, но просто не уверен, что это такое. Я искал по всему Google, но не вижу решения, которые я могу предпринять. Любая помощь будет принята с благодарностью.

============jade================ 
    div(ng-app="sell" ng-controller="sellCtlr") 
     .container-fluid 
     form#listingForm.form-horizontal 
         .form-group 
         .row 
          .col-xs-8 
           label.control-label(for="title") title 
           input#title.form-control(type="text", name="title", ng-model="listing.title") 
        .form-group 
         .row 
          .col-xs-8 
           label.control-label(for="subTitle") sub-title 
           input#subTitle.form-control(type="text", name="subTitle",, ng-model="listing.subTitle") 

    ......... 
    ......... 
         .form-group 
         .col-xs-6 
          button.btn.btn-primary(type="submit" ng-click="createListing()") Submit 
============app.js================ 
/* server side controllers **/ 
var listController = require('./server/controllers/list-controller'); 

/* routes */ 
var sell = require('./client/routes/sell'); 

/* rest api */ 
app.get('/api/listings', listController.list); 
app.post('/api/listings', listController.create); 

/* sell route */ 
app.use('/sell', sell); 

============sell.js (sell route)================ 
var express = require('express'); 
var router = express.Router(); 

/* GET sell page. */ 
router.get('/', function(req, res, next) { 
    res.render('sell', { title: 'Express' }); 
}); 

/* POST sell page. */ 
router.post('/api/listings', function(req, res, next) { 
    res.render('sell', { title: 'Express' }); 
}); 

module.exports = router; 

============sellCtlr.js (client side)================  

var app = angular.module('sell', ['ngResource']); 

app.controller('sellCtlr', ['$scope', '$resource', 
    function($scope, $resource){ 

    var Listing = $resource('/api/listings'); 
    $scope.listing = new Listing(); 

    $scope.createListing = function(){ 

     Listing.save($scope.listing, function(){ 
      //data saved. do something here. 
     });//saves an entry. Assuming $scope.listing is the Listing object 
     }; 
    }]); 

============list-controller.js (server side)================ 

var Listing = require('../models/listing'); 

// save listing 
module.exports.create = function (req, res) { 
    var listing = new Listing(req.body); 
    listing.save(function (err, result){ 
     res.json(result); 
    }); 
} 
//retrieve all listings 
module.exports.list = function(req, res){ 
Listing.find({}, function(err, results) { 
    res.json(results); 
}); 
} 


============listing.js (model, server side)================ 

var mongoose = require('mongoose'); 

module.exports = mongoose.model('Listing', { 
    title: String, 
    subTitle: String 

}); 

Много Спасибо, ребята

EDIT 2 - ПОЛНЫЙ 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'); 

/*%%%%% server side controllers %%%%%%**/ 
var listController = require('./server/controllers/list-controller'); 
/*%%%%% server side controllers %%%%%%**/ 


/*%%%%% mongoose config %%%%%%**/ 
var secrets = require('./config/secrets'); 
var mongoose = require('mongoose'); 
//Connect to the MongoDB 
mongoose.connect(secrets.db); 
/*%%%%% mongoose config %%%%%%**/ 

/*%%%%% routes %%%%%%**/ 
var index = require('./client/routes/index'); 
var listing = require('./client/routes/listing'); 
var users = require('./client/routes/users'); 
var sell = require('./client/routes/sell'); 
/*%%%%% routes %%%%%%**/ 

/*%%%%% express setup %%%%%%**/ 
var app = express(); 
/*%%%%% express setup %%%%%%**/ 

/*%%%%% view engine setup %%%%%%**/ 
app.set('views', path.join(__dirname, 'client/views')); 
app.set('view engine', 'jade'); 
/*%%%%% view engine setup %%%%%%**/ 

/*%%%%% client side directories %%%%%%**/ 
app.use(express.static('client')); 
app.use(express.static('client/views')); 

app.use('/js', express.static(__dirname + '/client/js')); 
app.use('/js', express.static(__dirname + '/client/views/js')); 

app.use('/css', express.static(__dirname + '/client/views/css')); 

/*%%%%% rest api's %%%%%%**/ 
app.get('/api/listings', listController.list); 
app.post('/api/listings', listController.create); 
/*%%%%% rest api's %%%%%%**/ 



// 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('/', index); 
app.use('/users', users); 
app.use('/sell', sell); 

// 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

Вы не регистрируете модель правильно, вам нужно использовать mongoose.Schema. Я удивлен, что вы не ошибаетесь.

var mongoose = require('mongoose'); 

module.exports = mongoose.model('Listing', new mongoose.Schema({ 
    title: String, 
    subTitle: String 
})); 

EDIT1:

Изменить ваш сохранить() вызов на следующее:

$scope.createListing = function(){ 
    $scope.listing.$save(); 
}; 

EDIT3

Порядок, в котором вы регистрируете ваши вопросы промежуточного слоя. Вы регистрируете свои маршруты, прежде чем ваш bodyparser, это неверно. Ваш парсер тела и другое промежуточное программное обеспечение должны быть зарегистрированы до маршрутов/API.

Смотрите ниже:

/*%%%%% express setup %%%%%%**/ 
var app = express(); 
/*%%%%% express setup %%%%%%**/ 

/*%%%%% view engine setup %%%%%%**/ 
app.set('views', path.join(__dirname, 'client/views')); 
app.set('view engine', 'jade'); 
/*%%%%% view engine setup %%%%%%**/ 

// 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'))); 


// ***Register the API AFTER the body and cookie parser** 

/*%%%%% client side directories %%%%%%**/ 
app.use(express.static('client')); 
app.use(express.static('client/views')); 

app.use('/js', express.static(__dirname + '/client/js')); 
app.use('/js', express.static(__dirname + '/client/views/js')); 

app.use('/css', express.static(__dirname + '/client/views/css')); 

/*%%%%% rest api's %%%%%%**/ 
app.get('/api/listings', listController.list); 
app.post('/api/listings', listController.create); 
/*%%%%% rest api's %%%%%%**/ 

app.use('/', index); 
app.use('/users', users); 
app.use('/sell', sell); 
+0

Прежде всего, благодаря @Yuri Зарубин, для предоставления помощи. Я попробовал исправление, но все тот же результат. (создание -> _id: ObjectId ("55e5bd389855141c195033d7"), _v: 0). Если я заполню некоторые данные на стороне сервера в списке-controller.js, он сохраняется. Я не уверен, почему сообщение на клиентском ресурсе не отправляет данные серверному контроллеру. – suresh

+0

Вы получаете сообщение об ошибке? Какая проблема? –

+0

Ошибка отсутствует. Просто нажимает пустую запись с идентификатором объекта и без данных (заголовок и субтитры). Выпустил console.log в list-controller.js и дал мне (серверный список-контроллер *** create *** вызвал .... объект-листинг: {_id: 55e5bdb09855141c195033d8} название: undefined subtitle: undefined) – suresh

Смежные вопросы