Node.js中使用TXN将附件上传到CouchDB的问题

DigiLord

我正在编写一个应用程序,该应用程序从CouchDB文档中提取附件,将其写入磁盘,对其进行操作,然后将生成的文档存储回CouchDB中。第一部分工作出色。获取附件,将其写入磁盘并进行操作都没有问题。

要复制以下错误,您需要执行以下操作:

  • 一台运行在某处或可以访问某处的CouchDB服务器。
  • 一个名为presentations的数据库
  • 所述数据库中的文档。
  • 在演示文稿中以文档的_id命名的目录
  • 所述目录中的PNG。
  • 节点模块
    • fs
    • 小路
    • 哑剧
    • 地球
    • txn

更改_workdir的位置以匹配您创建目录的位置。

将程序另存为uploadPNG.js使用此命令运行

./uploadPNG.js --id directoryName

应该将所有文件添加到与目录具有相同ID的CouchDB文档中。实际上,以下代码确实提取了该文档。它只是不添加附件,我不确定为什么。这是运行程序所导致的错误。

任何人都可以像我认为的那样帮助我使其正常工作吗?


错误

{ [Error: CouchDB error: {"error":"unknown_error","reason":"function_clause"}]
  statusCode: 500,
  error: 'unknown_error',
  reason: 'function_clause' }

Error: CouchDB error: {"error":"unknown_error","reason":"function_clause"}
    at /Users/digilord/projects/superslick/couch_worker/node_modules/txn/lib/lib.js:59:18
    at Request._callback (/Users/digilord/projects/superslick/couch_worker/node_modules/txn/lib/lib.js:125:12)
    at Request.self.callback (/Users/digilord/projects/superslick/couch_worker/node_modules/txn/node_modules/request/index.js:142:22)
    at Request.EventEmitter.emit (events.js:98:17)
    at Request.<anonymous> (/Users/digilord/projects/superslick/couch_worker/node_modules/txn/node_modules/request/index.js:856:14)
    at Request.EventEmitter.emit (events.js:117:20)
    at IncomingMessage.<anonymous> (/Users/digilord/projects/superslick/couch_worker/node_modules/txn/node_modules/request/index.js:808:12)
    at IncomingMessage.EventEmitter.emit (events.js:117:20)
    at _stream_readable.js:895:16
    at process._tickCallback (node.js:415:13)

uploadPNG.js

#!/usr/bin/env node
var fs = require('fs'),
    path = require('path'),
    mime = require('mime'),
    glob = require("glob");

var txn = require('txn').defaults({"timestamps":true, "couch":"http://localhost:5984"});
var presentations_txn = txn.defaults({"db":"presentations", "delay":1000, "timeout":30000});


var argv = require('optimist')
    .usage('Usage: $0 --id [Document ID]')
    .demand(['id'])
    .argv;

var _doc_id = argv.id;

var _workdir = path.join(path.resolve('/Volumes/ramdisk'), 'work');
var _docdir = path.join(_workdir, _doc_id);

var _doc = null

var addAttachments = function(doc, to_txn){
    console.log(doc);
    console.log('Initial document fetched for: ', doc._id);
    console.log('Ready to push files to CouchDB for: ', _doc_id);

    var _globPattern = _docdir + '/*.png';
    var _pngs = glob.sync(_globPattern);
    // console.log('PNGs: ', _pngs);

    _pngs.forEach(function(_file){
        var _filecontents = fs.readFileSync(_file);
        var _mime_type = mime.lookup(_file);
        var _filename = _file.split('/').pop();

        console.log("Processing Attachment: ", _filename)
        if(typeof doc._attachments[_filename] == 'object'){
            doc._attachments[_filename].content_type = _mime_type;
            doc._attachments[_filename].body = _filecontents;
        } else {
            doc._attachments[_filename] = {};
            doc._attachments[_filename].content_type = _mime_type;
            doc._attachments[_filename].body = _filecontents;
        }
        // uploadAttachment(_file, _docdir, _doc_id)
    });
    doc.processed = true;
    to_txn()
}

presentations_txn({"id": _doc_id}, addAttachments, function(error, newData) {
  if(!error)
    return console.log("Processed " + _doc_id + " to state: " + newData.processed);

  // These errors can be sent by Txn.
  if(error.timeout)
    return console.log("Gave up after MANY conflicts");
  if(error.conflict)
    return console.log("addAttachments never completed. Troubleshoot and try again");

  console.log(error);
  throw error; // Unknown error
});
杰森·史密斯

我认为您需要对附件主体进行base64编码。我也认为附件内容存储在.data,而不是.body

doc._attachments[_filename].content_type = _mime_type;
doc._attachments[_filename].data = _filecontents.toString('base64');

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.js中使用TXN将附件上传到CouchDB的问题

来自分类Dev

将图像从JQuery上传到Node JS

来自分类Dev

无法将文件上传到Node JS

来自分类Dev

无法使用文件上传将图像上传到node.js中的特定文件夹

来自分类Dev

使用流使用Node.js将视频上传到Youtube

来自分类Dev

使用流使用Node.js将视频上传到Youtube

来自分类Dev

Node.js将文件上传到Buffer而不是/ tmp

来自分类Dev

如何从node.js将资产上传到github版本

来自分类Dev

如何使用Ember Droplet将文件上传到Node.js?

来自分类Dev

使用多方将图像从iPad应用程序上传到Node JS服务器

来自分类Dev

是否可以使用node.js中的update_with_media将音频上传到Twitter?

来自分类Dev

Google Drive API:无法使用Node.js将文件上传到根文件夹

来自分类Dev

使用Node.js和Busboy将多个文件上传到S3

来自分类Dev

如何使用Node.js和Axios将文件上传到AWS中的预签名URL?

来自分类Dev

使用Node.js,Express,Mongoose和React将图像上传到MongoDB

来自分类Dev

我无法将文件上传到使用node js multer指定的目录中

来自分类Dev

使用Node JS将图像从本地目录上传到Google Cloud Storage

来自分类Dev

使用puppeteer将网络抓取的数据上传到node.js中的Firebase云存储

来自分类Dev

尝试使用Node js将多个图像上传到AWS时遇到错误

来自分类Dev

是否可以使用node.js中的update_with_media将音频上传到Twitter?

来自分类Dev

使用AFNetworking通过node.js将图像上传到服务器失败

来自分类Dev

使用 Node.js 将文件上传到 Google Cloud Storage(已声明“bucketName”)

来自分类Dev

如何使用Node将图像上传到S3

来自分类Dev

在不使用Express的情况下将图像上传到Node.js中的服务器

来自分类Dev

使用Express和multer将具有Java MultipartEntity的图像上传到Node.js服务器

来自分类Dev

如何使用Node.js将Blob base64字符串上传到Google云存储

来自分类Dev

如何使用带有node.js的s3 api将文件上传到Wasabi存储桶?

来自分类Dev

在不使用Express的情况下将图像上传到Node.js中的服务器

来自分类Dev

如何使用 Node.js 从 AWS Lambda 中的 /tmp 文件夹将 WAV 文件上传到 S3

Related 相关文章

  1. 1

    Node.js中使用TXN将附件上传到CouchDB的问题

  2. 2

    将图像从JQuery上传到Node JS

  3. 3

    无法将文件上传到Node JS

  4. 4

    无法使用文件上传将图像上传到node.js中的特定文件夹

  5. 5

    使用流使用Node.js将视频上传到Youtube

  6. 6

    使用流使用Node.js将视频上传到Youtube

  7. 7

    Node.js将文件上传到Buffer而不是/ tmp

  8. 8

    如何从node.js将资产上传到github版本

  9. 9

    如何使用Ember Droplet将文件上传到Node.js?

  10. 10

    使用多方将图像从iPad应用程序上传到Node JS服务器

  11. 11

    是否可以使用node.js中的update_with_media将音频上传到Twitter?

  12. 12

    Google Drive API:无法使用Node.js将文件上传到根文件夹

  13. 13

    使用Node.js和Busboy将多个文件上传到S3

  14. 14

    如何使用Node.js和Axios将文件上传到AWS中的预签名URL?

  15. 15

    使用Node.js,Express,Mongoose和React将图像上传到MongoDB

  16. 16

    我无法将文件上传到使用node js multer指定的目录中

  17. 17

    使用Node JS将图像从本地目录上传到Google Cloud Storage

  18. 18

    使用puppeteer将网络抓取的数据上传到node.js中的Firebase云存储

  19. 19

    尝试使用Node js将多个图像上传到AWS时遇到错误

  20. 20

    是否可以使用node.js中的update_with_media将音频上传到Twitter?

  21. 21

    使用AFNetworking通过node.js将图像上传到服务器失败

  22. 22

    使用 Node.js 将文件上传到 Google Cloud Storage(已声明“bucketName”)

  23. 23

    如何使用Node将图像上传到S3

  24. 24

    在不使用Express的情况下将图像上传到Node.js中的服务器

  25. 25

    使用Express和multer将具有Java MultipartEntity的图像上传到Node.js服务器

  26. 26

    如何使用Node.js将Blob base64字符串上传到Google云存储

  27. 27

    如何使用带有node.js的s3 api将文件上传到Wasabi存储桶?

  28. 28

    在不使用Express的情况下将图像上传到Node.js中的服务器

  29. 29

    如何使用 Node.js 从 AWS Lambda 中的 /tmp 文件夹将 WAV 文件上传到 S3

热门标签

归档