【问题标题】:Saving Files and Sending them to client (NodeJS/Express/MongoDB/Mongoose)保存文件并将它们发送到客户端(NodeJS/Express/MongoDB/Mongoose)
【发布时间】:2015-12-25 02:00:09
【问题描述】:

如何在猫鼬中保存一些文件? 例如,我有POST 方法/GET 方法/ 的路由。 发布到 / 应该将发送的文件保存到 MongoDB 数据库(猫鼬),而获取 / 应该发送保存的文件。如果文件是图像,我如何将其作为图像发送给客户端? (从用户保存原始文件是一种好习惯,还是应该将它们保存在 mongodb 中 - 如果是这样:如何?)。

【问题讨论】:

  • 如果可能的话,我建议您将图像存储在磁盘上而不是将其保存到数据库中,这样会少很多麻烦。
  • 我不认为保存原始图像是个好主意

标签: node.js mongodb express mongoose


【解决方案1】:

首先很明显,您应该有 mongoDB 的架构。 您可以将它放在SCHEMA.js 文件中,如下所示:

  module.exports = {
         model: function(Schema) {
          return new Schema({
             _id: { type: String, index: true, unique: true },
             updateDate: { type: Date, default: Date.now },
             data: String
            })
          }
  }

那么你有你的要求,你可以做如下:

  router.post('/', function(req, res){
     var data = req.body.data;
     SCHEMA = require('/YOUR/SCHEMA/PATH').SCHEMA;

     SCHEMA.update({
       _id: data.id
     }, {
        data: data
     }, {
      upsert: true
      }, function (err) {
       if (err) {console.error('subs-on-userapps> failed update token, err=',err);}
     });
  })

在上面的部分中,您获取数据表单请求,然后将其插入到您的 mongoDB。

** .update 首先在第一部分搜索您的数据并使用upsert:true 选项插入数据如果之前不存在。

为了访问您的数据,您还有其他使用 Get 方法的路由,因此:

      router.get('/', function(req, res){

          SCHEMA.findOne({QUERY})
               .execQ()
               .then(function(result) {
                    res.json({result: result})
               });

      })

【讨论】:

  • 这并不是我需要知道的...我知道如何处理请求或创建模式,我只需要知道如何存储用户使用文件输入发送的文件并将它们发送回原始文件不是字符串数据。
  • 有关存储此类二进制数据的详细信息,请参阅GridFs 文档。
猜你喜欢
  • 2020-06-18
  • 2020-12-07
  • 2021-03-05
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 2018-04-24
  • 2023-01-31
  • 1970-01-01
相关资源
最近更新 更多