質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.23%

node.jsと通信

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 740

msz006

score 10

下記のようなソースがあります
var async = require('async');
var aws = require('aws-sdk');
var s3 = new aws.S3({});
var https = require('https');
var path = require('path');
var mysql = require('mysql');
var analyzeJson = require('./analyzeJson');
var VISION_API_HOST = 'api.projectoxford.ai'; // Vision APIのホスト名
var VISION_API_PATH = 'https://api.projectoxford.ai/vision/v1.0/ocr?language=unk&detectOrientation=true&subscription-key='; // Vision APIのエンドポイント
var CONTENT_TYPE1 = 'application/octet-stream'; // Type
var CONTENT_TYPE2 = 'application/json; charset=utf-8'; var ANALYZED_FILE_EXTENSION = '.txt'; var XAmzDate = 'X-Amz-Date';
var ExportsHandler = function(destinationBucket, apiKey, dbConfig) {
var self = this;
self.destinationBucket = destinationBucket;
self.apiKey = apiKey;
self.dbConfig = dbConfig;
};

/**

  • S3の[get|put]Object用引数を返します。
  • bucket: バケット名
  • key: キー名
  • body: putObject時のデータ
    */
    ExportsHandler.prototype.paramsForS3 = function(bucket, key, body) {
    var params = {Bucket: bucket, Key: key};
    if (body) {
    params.Body = body;
    }
    return params;
    };

// err オブジェクトをJSON形式でログへ出力します。
ExportsHandler.prototype.consoleLogErr = function(err) {
console.log("err");
console.log(JSON.stringify(err, null, '  '));
};

ExportsHandler.prototype.getExportsHandler = function() {
var self = this;
return function(event, context) {
var records = [];
event.Records.forEach(function (eventRecord) {
var bucket = eventRecord.s3.bucket.name;
var key = decodeURIComponent(eventRecord.s3.object.key); 
var dirname = path.dirname(key);             
var extension = path.extname(key); 
var basename = path.basename(key, extension); 
var record = {
bucket: bucket,
key: key,
dirname: dirname,
basename: basename,
extension: extension,
data: null,
response: null,
done: false,
};
records.push(record);
});

records.forEach(function(record){
async.waterfall([
// S3から画像を取得します。
function(callback) {
console.log('records.forEach, s3.getObject');
var bucket = record.bucket;
var key = record.key;
var params = self.paramsForS3(bucket, key);
s3.getObject(params, function(err, data) {
if (!err) {
record.data = data;
callback(null, record);
} else {
self.consoleLogErr(err);
callback(err);
}
});
},
// 画像データをVision APIへ投げます。
function(record, callback) {
console.log('https.request');
var options = {
host: VISION_API_HOST,
type: CONTENT_TYPE1,
method: 'POST'
};
var request = https.request(options, function(response) {
response.setEncoding('utf8');
record.response = '';
response.on('data', function(chunk) {
record.response += chunk;
});
response.on('end', function() {
callback(null, record);
});
});
request.on('error', function(err) {
self.consoleLogErr(err);
callback(err);
});
var jsonObject = {
requests: [
{
image: {
content: record.data.Body.toString('base64'),
},
features: [
{
type: CONTENT_TYPE2,
maxResults: 1,
},
],
},
],
};
var jsonString = JSON.stringify(jsonObject);
request.write(jsonString);
request.end();
},
};

module.exports = ExportsHandler;

サーバー通信ができないで下記のようなエラーが出ます。
Assertion failed: (object->InternalFieldCount()) > (0), file c:\ws\src\util-inl.h, line 196

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る