Я пытаюсь прочитать свои файлы, которые я загрузил в mongodb, и каждый раз получаю file not found, когда явно есть файл с именем, которое я пытаюсь найти в моей базе данных. Я использовал метод это для реализации gridfs
КОД:
let mongoose = require('mongoose');
let gridfs = require('gridfs-stream');
const express = require('express');
const router = express.Router();
mongoose.connect('mongodb://foo123.mlab.com:123456/db_name', {
auth: {
user: 'username',
password: 'password'
}
})
.then(() => console.info('connection successful'))
.catch((err) => console.error(err));
mongoose.Promise = global.Promise;
gridfs.mongo = mongoose.mongo;
let connection = mongoose.connection;
connection.on('error', console.error.bind(console, 'connection error:'));
connection.once('open', () => {
var gfs = gridfs(connection.db);
router.post('/' ,(req, res) => {
gfs.exist({ filename: '6866866-Tue-May-29-2018.jpg' }, function (err, file) {
if (err || !file) {
console.info(err)
res.send('File Not Found');
} else {
let readstream = gfs.createReadStream({ filename: '6866866-Tue-May-29-2018.jpg' });
readstream.pipe(res);
}
});
})
})
module.exports = router;
файл из БД, который я пытаюсь получить:
{
"_id": {
"$oid": "5b0d2xxxxxxxxxx14cfb118"
},
"length": 641142,
"chunkSize": 261120,
"uploadDate": {
"$date": "2018-05-29T10:39:37.568Z"
},
"md5": "c9bc6d74axxxxxxxxxxxx25a70",
"filename": "6866866-Tue-May-29-2018.jpg",
"contentType": "image/jpeg"
}
null ошибки нет, только ответ с File Not Found «Файл не найден» - вот ваше сообщение. Логика, которая привела вас туда, я считаю неправильной. Мой Javascript заржавел, но я не думаю, что вы сможете успешно определить, является ли 'err' нулевым или нет. Но счастлив ошибаться.
Вы можете объяснить? функция говорит в основном, что если нет объекта file или есть ошибка в пути, отправьте File Not Found довольно прямо
Попробуйте переписать функцию как: if (! File) {console.info (err) ...} else {....} и посмотрите, что из этого получится.
нет, тот же результат :(
Игнорируя логику If / Else, действительно ли она работает, когда вы вызываете gfs.createReadStream ()? Возможно, что-то происходит на уровне базы данных, прав доступа и т. д.?
ну, я так не думаю, поскольку он не доберется до этой части, он вызовет res.send и завершит функцию.
Вы уверены, что при тестировании используете POST-запрос? Есть ли у вас другие обработчики маршрута '/'?
Я пробовал использовать mLab, он отлично работает с тем же фрагментом кода, который вы использовали pastebin.com/raw/N1qEB4q2. Вы пишете и читаете из одной и той же БД? Разместите полный код пишите и читайте.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Из любопытства, что попадает в журнал консоли? Что содержит "err"?