20200219のNode.jsに関する記事は6件です。

nodemailer envelope設定サンプル

テスト環境

  • node.js v12
  • nodemailer v6.3

公式ドキュメント

サンプルコード

send-mail.js
var Mailer = require('nodemailer')

//
// ローカルsmtpサーバ
//
const smtp = Mailer.createTransport({
  host: 'localhost',
  port: 25
})

const message = {
// メッセージヘッダとかの設定
// => メール受け取る側から見える情報
  from: 'from@example.com',
  to: ['to@example.com'],
  cc: ['cc@example.com'],
  bcc: ['bcc@example.com'],
  subject: 'HELLO! nodemailer!!',
  text: 'this is a test mail',
  html: '<p>this is a test mail</p>',

// envelope: SMTPサーバー用の設定
//  FROM: (バウンスメールが届くアドレス)
//    envelope.from
//  と
//  RCPT TO: (実際に送信する宛先)
//    envelope.to, envelope.cc, envelope.bcc

// envelopeは "省略可能"
// 省略した場合は以下のように自動付与されると思っていい
  envelope: {
    from: 'from@example.com',
    to: ['to@example.com'],// RCPT TO: に突っ込まれる
    cc: ['cc@example.com'],// RCPT TO: に突っ込まれる
    bcc: ['bcc@example.com'],// RCPT TO: に突っ込まれる
  }
}

smtp.sendMail(message)

メッセージヘッダのfromとバウンスメールの受け取りアドレスを変えたい場合

例えば、MAILER-DAEMONが返ってきてしまった該当メールアドレスは無効化したいので、バウンスメール用のメールアドレスを用意して監視したい時などが利用場面です。

この場合は、envelopeを明示的に設定する必要あります。

envelopeを明示的に設定する場合、message.to, message.cc, message.bccに宛先を書くだけでは、メールは届かないので注意。
envelope.to, envelope.cc, envelope.bcc に宛先を書く必要がある。

const message = {
  from: 'from@example.com',
  to: ['to@example.com'],
  cc: ['cc@example.com'],
  bcc: ['bcc@example.com'],
  subject: 'HELLO! nodemailer!!',
  text: 'bounce-mails are sent to for-bounce@example.com ',
  html: '<p>bounce-mails are sent to for-bounce@example.com</p>',
  envelope: {
    from: 'for-bounce@example.com',
    to: ['to@example.com'],
    cc: ['cc@example.com'],
    bcc: ['bcc@example.com'],
  }
}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Node.jsで動画変換処理

目次


概要

Node.jsをサーバとして利用した時に、動画加工処理の最適な方法は何かを調査する。
有名どころでは、ffmpeg。

参考

Node.jsでffmepgを使って動画からサムネイル/静止画を生成する
https://qiita.com/nasbi_suganuma/items/222cd894e09b7c5e9652

それFFmpegで出来るよ! ffmpeg自体の説明と操作
https://qiita.com/cha84rakanal/items/e84fe4eb6fbe2ae13fd8

環境構築

Macでのffmpegのインストール(時間がかかる)

brew install ffmpeg

※こんなエラーが出たので、

Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks

ディレクトリを作成し、権限与えて、もう一度インストール! 成功!

sudo mkdir /usr/local/Frameworks  
sudo chown $(whoami):admin /usr/local/Frameworks

Winでのffmpegのインストール 参考

【windows】FFmpegをインストールする手順
https://fukatsu.tech/windows-ffmpeg

fluent-ffmpegをインストール

npm install fluent-ffmpeg

fluented-ffmpegの使い方

難しいことをしないなら、 ffmpeg(入力ファイル).output(出力ファイル) で完了なので、結構簡単。

const filePath = `${__dirname}/../static/MovieFiles/${id}/`

ffmpeg(`${filePath}movie.mp4`)
  .output(`${filePath}movie.avi`)
  .on('end', () => {
    // ここに処理完了後の処理記述
    console.log('Processing finished !')
  })
  .screenshots({ // これはサムネイル作成の記述
    count: 1,
    folder: filePath,
    filename: 'thumbnail.jpg',
    size: '150x150'
  })
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Node.jsで動画変換処理(fluent-ffmpeg)

目次


概要

Node.jsをサーバとして利用した時に、動画加工処理の最適な方法は何かを調査する。
有名どころでは、ffmpeg。

参考

Node.jsでffmepgを使って動画からサムネイル/静止画を生成する
https://qiita.com/nasbi_suganuma/items/222cd894e09b7c5e9652

それFFmpegで出来るよ! ffmpeg自体の説明と操作
https://qiita.com/cha84rakanal/items/e84fe4eb6fbe2ae13fd8

環境構築

Macでのffmpegのインストール(時間がかかる)

brew install ffmpeg

※こんなエラーが出たので、

Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks

ディレクトリを作成し、権限与えて、もう一度インストール! 成功!

sudo mkdir /usr/local/Frameworks  
sudo chown $(whoami):admin /usr/local/Frameworks

Winでのffmpegのインストール 参考

【windows】FFmpegをインストールする手順
https://fukatsu.tech/windows-ffmpeg

fluent-ffmpegをインストール

npm install fluent-ffmpeg

fluent-ffmpegの使い方

難しいことをしないなら、 ffmpeg(入力ファイル).output(出力ファイル) で完了なので、結構簡単。

const filePath = `${__dirname}/../static/MovieFiles/${id}/`

ffmpeg(`${filePath}movie.mp4`)
  .output(`${filePath}movie.avi`)
  .on('end', () => {
    // ここに処理完了後の処理記述
    console.log('Processing finished !')
  })
  .screenshots({ // これはサムネイル作成の記述
    count: 1,
    folder: filePath,
    filename: 'thumbnail.jpg',
    size: '150x150'
  })
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS Lambda@Edge で 環境変数を使う方法 (Node.js)

はじめに

Lambda ならば、環境変数という項目があり、
そこにキーと値を書けば process.env オブジェクトから取得できました。

参考URL

AWS Lambda で環境変数を渡してみる(Node.js)

Lambda@Edge にも同じく環境変数の入力欄があるのですが、
どういうわけかまだサポートされてないらしく、
2020年2月時点では使用できません。

初見殺しもいいところですね。

でも、環境変数が使いたい時はあると思います。
色々模索した結果、以下の方法に落ち着きました。

結論 dotenv ライブラリを使う

ローカル環境とかにdotenvライブラリを導入します

$ cd /path/to/project
$ npm install dotenv

次に、 .env ファイルを用意して、そこに環境変数を色々書いておきます。

$ touch .env
$ vi .env

私はかつてLaravel5(PHP)を使っていたので、それに習った書き方をしています。
Laravelいいよね。

.env
APP_ENV=production
APP_URL=https://www.example.com
APP_DEBUG=false

ここまで出来たら、これらをZIPファイルにまとめて、
Lambda@Edgeにアップロードします。

ZIPファイルでアップロードする方法は、
ネットに腐るほど書いてますのでググってください

【絶対にすること】 エディタで隠しファイルを表示する

2020.02.19 追記

下の方法よりもっと簡単な方法がありました。
プロジェクトフォルダの右の歯車をクリックした後、「Show Hidden Files」をクリックするだけです

3.png

ファイルアップロードが終わったら、
以下の手順に従い、コンソールエディタで
「.env」などの隠しファイルが表示されるようにしてください
(将来の Lambda@Edge のアップデートで表示方法が変更になる可能性があります)

1.png

① エディタ右上の歯車マークをクリック
② User Settings をクリック
③ Tree and Go Panel をクリック
④ Hidden File Pattern: から 次のように 「, .*」 を削除

*.pyc, __pycache__, .*
↓
*.pyc, __pycache__

2.png

これにより、隠しファイルが表示されるので
どこに設定ファイルがあるかがわかるようになりますね。

(筆者は動作確認のために .envファイルを複数用意していますが、
必要ありません。「.env」ファイルだけが使用されます)

環境変数の取得方法

Lambdaで環境変数を取得する方法と全く同じやり方で取得できます。
つまり、 process.env オブジェクトから取得できます。

var ENV = require('dotenv').config();
var appUrl = process.env['APP_URL'];
console.log(appUrl); // e.g. "https://www.example.com"

私の場合、毎回 process.env って書くのがだるいので
Laravelのenv関数みたいな感じにラッピングしてから使用しています

index.js
/* =====================================================================
*  Load External Modules
* =================================================================== */
try {
  var ENV = require('dotenv').config(); // 環境変数が使えるようになったらこのモジュールは不要
}
catch(ex){ // if module is not exists
  console.error(ex);
}

/**
 * Get Envrionment Variable
 * Lambda@Edgeは2020年2月時点では環境変数が使えないから
 * DotEnvライブラリで代用する(環境変数もDotEnvも process.env で値を取得できる)
 *
 * @param  string key (should be write UPPERCASE)
 * @param  mixed defaultValue [optional]
 * @return mixed
 */
function getEnv(key, defaultValue = null)
{
  var myKey = key.toUpperCase();
  return process.env[myKey] ? process.env[myKey] : defaultValue;
}

function loadProfile()
{
  var env = new Object();
  env.APP_URL = getEnv("APP_URL", "https://www.example.com");
  env.APP_ENV = getEnv("APP_ENV", "development");
  env.APP_DEBUG = getEnv("APP_DEBUG", true);
  env.S3_BUCKET_NAME = getEnv("S3_BUCKET_NAME", "my-s3-bucket-name");
  env.EC2_URL = getEnv("EC2_URL", "");
  return env;
}

exports.handler = async (event, context, callback) => {
  var request = event.Records[0].cf.request;

  var env = loadProfile();

  console.log(env["APP_URL"]); // e.g. "https://www.example.com" 
  console.log(env["APP_ENV"]); // e.g. "production" .env に定義されているので その値が使用される
  console.log(env["S3_BUCKET_NAME"]); // e.g. "my-s3-bucket-name" .env に定義されていないので getEnv関数の第2引数が使用される

  callback(null, request);
};

もっと良い方法をご存知の方が
いらっしゃいましたらコメントください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Cloud9上でYarnでbootstrap material designを導入する

railsで、初心者のメンターをしていて、非Macユーザーで、環境がcloud9のケースで、yarnでbootstrapを導入しました。あまり記事がなかったので、備忘録で書きます。

環境

windows(64bit)
ruby 2.6.4
Rails 5.2.4
Cloud9上で開発

Node.jsのバージョンアップ

Nodeのstableなバージョンをインストールします。

$ nvm install stable

Yarnのインストール

$ npm install -g yarn

bootstrap material designを導入

package.jsonを生成

$ yarn init

bootstrap material designを追加

$ yarn add bootstrap-material-design

インストール

$ yarn install

マニフェストファイルへ読み込みのpathを記載

app/assets/javascripts/application.js
//= require bootstrap-material-design/dist/js/bootstrap-material-design.js
app/assets/stylesheets/application.scss
@import 'bootstrap-material-design/dist/css/bootstrap-material-design';
@import 'font-awesome-sprockets';
@import 'font-awesome';

ここまでブラウザ画面で確認しても、

Sass::SyntaxError

が出る。

config/initializers/assets.rb
Rails.application.config.assets.paths << Rails.root.join('node_modules')

こちらの記載でファイルが読み込めるように設定。

サーバーを再起動すれば、無事表示!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Cloud9上でYarnでbootstrap material designを導入する

railsで、初心者のメンターをしていて、非Macユーザーで、環境がcloud9のケースで、yarnでbootstrapを導入しました。あまり記事がなかったので、備忘録で書きます。

環境

windows(64bit)
ruby 2.6.4
Rails 5.2.4
Cloud9上で開発

Node.jsのバージョンアップ

Nodeのstableなバージョンをインストールします。

$ nvm install stable

Yarnのインストール

$ npm install -g yarn

bootstrap material designを導入

package.jsonを生成

$ yarn init

bootstrap material designを追加

$ yarn add bootstrap-material-design

インストール

$ yarn install

マニフェストファイルへ読み込みのpathを記載

app/assets/javascripts/application.js
//= require bootstrap-material-design/dist/js/bootstrap-material-design.js
app/assets/stylesheets/application.scss
@import 'bootstrap-material-design/dist/css/bootstrap-material-design';
@import 'font-awesome-sprockets';
@import 'font-awesome';

ここまでブラウザ画面で確認しても、

Sass::SyntaxError

が出る。

config/initializers/assets.rb
Rails.application.config.assets.paths << Rails.root.join('node_modules')

こちらの記載でファイルが読み込めるように設定。

サーバーを再起動すれば、無事表示!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む