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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

0回答

1371閲覧

node.jsと通信

msz006

総合スコア66

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2016/09/08 01:47

下記のようなソースがあります
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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問