Я пытаюсь написать приложение, функциональность которого включает хранение файлов в MongoDB. Мне удалось загрузить туда файлы с помощью библиотеки GridFS, но потом мне много раз не удавалось получить доступ к данным. Я постоянно получаю ответ с внутренней ошибкой сервера при загрузке метаданных файлов с таким запросом:
router.get('/uploads', async (req,res) => {
try {
gfs.files.find().toArray( (err, files) => {
if(!files || files.length === 0) {
return res.status(404).json({message: 'No files exisits'})
}
})
res.status(200).json(files);
} catch (error) {
return res.status(500).json({ message: "Could not find files, please try again" });
}})
Тип содержимого: приложение / json; charset = utf-8
Другой запрос на загрузку определенных файловых данных разрушает весь мой бэкэнд, и я получаю эту ошибку:
Ошибка прокси: не удалось запросить прокси / api / user / getuser с localhost: 3000 на http: // localhost: 4000 / (ECONNREFUSED).
После этого ни один из моих запросов не работает должным образом ни на одной странице.
И это код этого запроса nodejs:
router.get('/uploads/:filename', async (req,res) => {
try {
gfs.files.findOne({filename: req.params.filename}, (err, file) => {
if(!file || file.length === 0) {
return res.status(404).json({message: 'No file exisits'})
}
})
res.status(200).json(file);
} catch (error) {
return res.status(500).json({ message: "Could not find files, please try again" });
}})
Конфигурации GridFs следующие:
const conn = mongoose.createConnection(config.get('mongoURI'));
conn.once('open', () => {
gfs = Grid(conn.db, mongoose.mongo);
gfs.collection('uploads');
})
const storage = new GridFsStorage({
url: config.get('mongoURI'),
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(15, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString('hex') + path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: 'uploads'
};
resolve(fileInfo);
});
});
}
});
Я предполагаю, что я упустил что-то важное в документации, и я даже не пытаюсь загрузить весь образ, я застрял. Будем признательны за полезные советы!
1 ответ
Я обнаружил проблему, из-за которой возникла ошибка! При эмуляции моего запроса я получил эту ошибку:
[0] Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту.
Следовательно, проблема была в этой части моего кода: res.status (200) .json (файлы);
Nodejs не позволяет устанавливать заголовок статуса после отправки фактического тела запроса. Итак, все исправления, которые мне нужно было сделать, были:
res.status (200) .json (файлы) в -> res.json (файлы);
Надеюсь, решение будет кому-то полезно.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.