Javascript 从mongodb读取文件时,每次调用都返回相同的文件

Javascript 从mongodb读取文件时,每次调用都返回相同的文件,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我试图从我的数据库中读取一个文件,由于某种原因,它每次都返回相同的文件,而不考虑文件名,这是我试图获取它的方式 背面: router.post('/', (req, res) => { mongoose .connect('mongodb://dbname.mlab.com:12345/db', { auth: { user: 'user',

我试图从我的数据库中读取一个文件,由于某种原因,它每次都返回相同的文件,而不考虑文件名,这是我试图获取它的方式

背面:

router.post('/', (req, res) => {
    mongoose
        .connect('mongodb://dbname.mlab.com:12345/db', {
            auth: 
                {
                    user: 'user',
                    password: 'pw'
                }
        })
        .then(() => {
            console.log('connection successful')
            var gridfs = require('mongoose-gridfs')({
                collection:'fs',
                model:'files',
                mongooseConnection: mongoose.connection
            });

            Attachment = gridfs.model;


            // large file example
            var stream = Attachment.readByFileName(req.body.imageName);
            console.log(stream)

            stream.on('data', (image) => {
                base64data += image.toString('base64'); // converting buffer to base64 string
                base64data = base64data.replace('undefined', '');
                console.log(base64data)
            });
            stream.on('close', () => {
                res.send(base64data)
            });

        })
        .catch((err) => console.error(err));
})
正面:

getImageBuffer = (imageName) => {
  this.forceUpdate();
  console.log('this is the image im fatching', imageName)
  axios
    .post('https://myserver.com/readCarImg', {
      imageName: imageName
  })
  .then((res) => {
    this.setState({
      imageBuffer:`data:image/jpg;base64,${res.data}`
    })
  })
  .catch((e) => {
    console.log('there was problem getting image buffer', e)
  })
}
正在从状态删除图像:

  showModalMarker = () => {
      this.setState({
        imageBuffer: undefined
      })
  }

注意:我正在记录
imageName
,以确保每次我都会得到不同的名称,而且我是。而且我在每次新调用之前都会从状态中删除图像字符串,以确保它干净。我正在记录服务器的响应,可以确认每次返回的缓冲区都是相同的。我正在使用
gridfs
将图像存储在我的mongo db中,如果这会产生一些差异

为什么要将图像作为base64字符流发送?您应该有一个类似于
.get('/file/:name',(req,res)=>…
的路由,在该路由中,您只需使用
.pipe()从GridFS返回文件内容,就好像它是一个“真实的文件”
在二进制输出流上。除非您在编写它时认为需要Base64编码,而您不需要这样做。您基本上误解了使用内联Base64的原理。出于您的目的,请使用“看起来”像文件的管道结果,只需设置“文件名”(API端点)在img标签src中attribute@NeilLunn干草人谢谢你的提示!我改变了我的路线来使用你的建议,它就像一个符咒一样工作!我仍然不知道为什么它以前不工作,但现在它重新加载速度快了10倍,并且它显示了我要求的每个文件!所以谢谢!