Я новичок в 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
secure() предназначен для защиты маршрутов с помощью Auth0. Я не уверен, что req.body содержит нужные мне данные, есть ли способ проверить?
да, вы можете использовать отладчик Node. Или просто console.info(req.body). Если он не содержит данных, то это проблема
Спасибо, поэтому я изменил res.redirect('/financial/assets/fixed-assets'); в console.info(req.body); на моем маршруте, и я получаю пустой объект json, когда я отправляю
Вам не нужно заменять res.redirect. Просто добавьте console.info в начале. Что говорит console.info?
это то, что я получаю в консоли, когда я отправляю форму - база данных database | {}database | POST /financial/assets/create-fixed-asset 302 115.263 ms - 104 - это мой док-контейнер





Я рекомендую использовать асинхронный маршрут и дождаться создания основного средства:
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')
}
});
Я пробовал это, но у меня все еще создается пустой объект
что происходит, когда вы используете console.info(req.body)? Я раньше не использовал Pug/Jade, поэтому не знаю, как делать запросы через эти типы представлений, но убедитесь, что вы используете анализатор тела в файле server/app/main.js. Кроме этого, ваш маршрут выглядит хорошо.
Если я console.info(req.body), я получаю {}. - Просто пустой объект. В моем файле app.js у меня есть var bodyParser = require('body-parser'); app.use(bodyParser.urlencoded({ extended: false }));, я думаю, может быть, это проблема с моим мопсом. Я забыл добавить свою форму мопса - я просто добавил ее в редактирование моего исходного сообщения.
extension должно быть истинным, потому что вы не можете вкладывать объекты, когда оно ложно. Здесь
Я понял. Это была моя форма мопса. Я забыл поместить атрибут имени в поля формы. Нубская ошибка. Спасибо за помощь вашим ребятам
Что такое
secured()? И что еще более важно, уверены ли вы, что вашreq.bodyдействительно содержит нужные вам данные?