Я создаю RESTful API, используя Node + Express 4 + MongoDB + Mongoose.Как сохранить файл с помощью Mongoose-Crate через экспресс-маршрут
Одна вещь, которую должен выполнить мой API, - это хранить и извлекать файлы. Что я буду хранить в Amazon S3. У Mongoose есть специальный плагин для прикрепления файлов к файлам Mongo под названием Mongoose-Crate, который, в свою очередь, имеет поставщика Mongoose-Crate-S3, который загружает файлы на S3.
Я приложил все усилия, чтобы адаптировать код примера с страницы Mongmose-Crate-S3 npm для работы в качестве экспресс-маршрута, но до сих пор я не получил изображение для успешной загрузки в хранилище S3. Документы моей модели «файл» создаются в моей базе данных mongo, но имеют только поля «_id» и «__v». No 'title', no 'description', ничего не указывает, что конечная точка .post фактически получает файлы, которые я пытаюсь опубликовать. Я постоянно вношу изменения в свой код, но обычно получаю некоторые изменения: «Не удалось получить ответ».
Вот мой мангуст file.js схемы (с моими учетными данными S4 удален конечно)
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var crate = require('mongoose-crate');
var S3 = require('mongoose-crate-s3');
var FileSchema = new Schema({
title: String,
description: String
});
FileSchema.plugin(crate, {
storage: new S3({
key: '<api-key-here>',
secret: '<secret-here>',
bucket: '<bucket-here>',
acl: '<acl-here>', // defaults to public-read
region: '<region-here>', // defaults to us-standard
path: function(attachment) { // where the file is stored in the bucket - defaults to this function
return '/' + path.basename(attachment.path)
}
}),
fields: {
file: {}
}
});
module.exports = mongoose.model('File', FileSchema);
А вот соответствующий фрагмент моего файла API маршрутов. Я довольно уверен, что код, который мне нужно исправить, здесь.
apiRouter.route('/files')
.post(function(req, res){
var file = new File()
//.attach = function(field, attachment, callback)
file.attach('image', req.body, function(error) {
// file is now uploaded and post.file is populated e.g.:
// post.file.url
})
})
.get(function(req, res){
//get a list of all files goes here
});
Я ожидаю, что я что-то очевидное отсутствую, но MEAN стек программирование является новым для меня, и я рыскал StackOverflow & полотна в целом ищу больше примеров или что-нибудь намек на то, что мне не хватает. Пожалуйста помоги!
Здесь это схема файлов https://github.com/eknowles/mongoose-crate-example/blob/master/app/models/file.js и api https://github.com/eknowles/mongoose-crate -example/blob/master/app/controllerlers/file.js # L30-L46 –
Удивительно! Большое спасибо за усилия, которые вы вложили в ответ на это. Это имеет большое значение для того, чтобы помочь мне понять выраженную маршрутизацию в целом. Я твой должник. Стек говорит, что я должен ждать 20 часов, прежде чем награждать щедрость, но будьте уверены, что это ваше! – metaColin
Не беспокойтесь! Экспресс - потрясающая каркас, множество действительно замечательных вещей! –