Не уверен, почему mongo/express создает только идентификатор, но не сохраняет другие данные

Я новичок в Express/Node/Mongo и пытаюсь создать приложение базы данных активов для хранения основных средств.

Я пытаюсь сохранить данные основных средств через веб-форму, но почему-то создается только идентификатор, а фактические данные из формы не сохраняются.

Я просмотрел данные в своем контейнере монго и вижу только идентификатор для каждого созданного мной актива.

Вот мой маршрут...

/* POST create fixed-assets page. */
router.post('/financial/assets/create-fixed-asset', secured(), function(req, res, next) {

  var assetData = {
    model_number: req.body.model_number,
    manufacturer: req.body.manufacturer,
    description: req.body.description,
    serial_number: req.body.serial_number,
    asset_tag_number: req.body.asset_tag_number,
    condition_when_purchased: req.body.condition_when_purchased,
    price_paid: req.body.price_paid
  };
  FixedAsset.create(assetData, function (error, asset) {
    if (error) {
      return next(error);
    } else {
      res.redirect('/financial/assets/fixed-assets');
    }
  });

});

Вот мой вид списка... (используя Pug/Jade)

block view
  .animated.fadeIn
    h1 Fixed Assets

    a(href='create-fixed-asset/') Create
    br
    br
    table#example.display
      thead
        tr
          th ID
          th Model
          th Description
      tbody
        each asset in assets
          tr
            td #{asset.id}
            td #{asset.model_number}
            td #{asset.manufacturer}

Вот моя модель мангуста...

var mongoose = require('mongoose');
var FixedAssetSchema = new mongoose.Schema({
  model_number: {
    type: String
  },
  manufacturer: {
    type: String
  },
  description: {
    type: String
  },
  serial_number: {
    type: String
  },
  asset_tag_number: {
    type: Number
  },
  condition_when_purchased: {
    type: String
  },
  price_paid: {
    type: Number
  }
});

var FixedAsset = mongoose.model('FixedAsset', FixedAssetSchema);
module.exports = FixedAsset;

Кто-нибудь понимает, почему это происходит? Спасибо

Редактировать: Также я забыл поставить код для моей формы мопса. Вот...

extends /default

block scripts
  if !starter
    // Plugins and scripts required by this view
    script(src='/js/main.js')


block view
  .animated.fadeIn
    .container.row
      .col-md-6
        h1 #{title}
    .container.row
      .col-md-6
        form(method='POST' action='/financial/assets/create-fixed-asset')
          div.form-group
            input#model_number.form-control(type='text', placeholder='Model Number')
          div.form-group
            input#manufacturer.form-control(type='text', placeholder='Manufacturer')
          div.form-group
            input#serial_number.form-control(type='text', placeholder='Serial Number')
          div.form-group
            input#description.form-control(type='text', placeholder='Description')
          div.form-group
            input#asset_tag_number.form-control(type='text', placeholder='Asset Tag Number')
          div.form-group
            input#condition_when_purchased.form-control(type='text', placeholder='Condition When Purchased')
          div.form-group
            input#price_paid.form-control(type='text', placeholder='Price Paid')
          br
          button.btn.btn-success(type='submit') Create

Что такое secured()? И что еще более важно, уверены ли вы, что ваш req.body действительно содержит нужные вам данные?

molamk 11.02.2019 22:51

secure() предназначен для защиты маршрутов с помощью Auth0. Я не уверен, что req.body содержит нужные мне данные, есть ли способ проверить?

user3005684 11.02.2019 22:57

да, вы можете использовать отладчик Node. Или просто console.info(req.body). Если он не содержит данных, то это проблема

molamk 11.02.2019 23:02

Спасибо, поэтому я изменил res.redirect('/financial/assets/fixed-assets'); в console.info(req.body); на моем маршруте, и я получаю пустой объект json, когда я отправляю

user3005684 11.02.2019 23:12

Вам не нужно заменять res.redirect. Просто добавьте console.info в начале. Что говорит console.info?

molamk 11.02.2019 23:18

это то, что я получаю в консоли, когда я отправляю форму - база данных database | {}database | POST /financial/assets/create-fixed-asset 302 115.263 ms - 104 - это мой док-контейнер

user3005684 11.02.2019 23:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
137
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я рекомендую использовать асинхронный маршрут и дождаться создания основного средства:

router.post('/financial/assets/create-fixed-asset', secured(),async function(req, res, next) {
  try{
    var assetData = {
      model_number: req.body.model_number,
      manufacturer: req.body.manufacturer,
      description: req.body.description,
      serial_number: req.body.serial_number,
      asset_tag_number: req.body.asset_tag_number,
      condition_when_purchased: req.body.condition_when_purchased,
      price_paid: req.body.price_paid
    };
    await FixedAsset.create(assetData, function (error, asset) {
      if (error) {
        return next(error);
      } else {
        res.redirect('/financial/assets/fixed-assets');
      }
    });
  }
  catch(err){
    res.redirect('/somewhere else/ a 404 page')
  }
});

Я пробовал это, но у меня все еще создается пустой объект

user3005684 12.02.2019 03:20

что происходит, когда вы используете console.info(req.body)? Я раньше не использовал Pug/Jade, поэтому не знаю, как делать запросы через эти типы представлений, но убедитесь, что вы используете анализатор тела в файле server/app/main.js. Кроме этого, ваш маршрут выглядит хорошо.

Colin Daniel 12.02.2019 03:58

Если я console.info(req.body), я получаю {}. - Просто пустой объект. В моем файле app.js у меня есть var bodyParser = require('body-parser'); app.use(bodyParser.urlencoded({ extended: false }));, я думаю, может быть, это проблема с моим мопсом. Я забыл добавить свою форму мопса - я просто добавил ее в редактирование моего исходного сообщения.

user3005684 13.02.2019 00:07

extension должно быть истинным, потому что вы не можете вкладывать объекты, когда оно ложно. Здесь

Colin Daniel 13.02.2019 00:32
Ответ принят как подходящий

Я понял. Это была моя форма мопса. Я забыл поместить атрибут имени в поля формы. Нубская ошибка. Спасибо за помощь вашим ребятам

Другие вопросы по теме