Express 4でフォーム取得はmulterを使う

Nodeの参考書買ったけど、参考書のバージョンが古くてわからなかったのでメモ。

Express4だと

routes/index.jsに


router.get('/', function( req, res, next) { .... };
router.post('/' , function( req, res, next) { .... };

というfuncitonが用意されていて、それにgetとpostの処理を書いていく。

multipart/form-dataなフォーム送信は

  1. document.querySelectorでフォーム要素を取得
  2. 取得したフォーム要素をnew FormData()でオブジェクト化(?)
  3. Ajaxで送信

でいいのだが、サーバ側のフォーム取得で手こずった。

参考書通りやっても、どうやってもrouter.postの中のreq.bodyがブランク。

一晩ググって
How to handle FormData from express 4
Node.js – サーバー で ブラウザ や アプリ から アップロード された フォームデータ を受け取る – Multerを使う

を発見。どうやらmulterというミドルウェア?を使う。まず

npm install multer --save

でmulterをインストール。そしてrouters/index.jsの冒頭に


var multer = require('multer');
var upload = multer();

を追加、

router.post('/', function(req , res , next){ ... };



router.post('/', upload.fields([]), function( req , res , next ){ ... };

と変更すれば、req.bodyに送信したフォームの内容が入ってくる。
でも、簡単なやつでしか試してない。。。

バージョンによってかなりちがうなー。
ちなみに、当方の環境は
node v7.8.0
express v4.15.0
npm v4.2.0
OS: Raspbian
機種:Raspberry Pi 3

補足
Express 3からExpress 4への移行はExpress 4 への移行multerを参照。これだけだと初学者にはハードルが高い。

.NET Coreが来るraspberry piに来る!!2

以前「.NET Coreがraspberry pi にくる!!」との投稿を行った。でも、その後検索したら、.NET環境ならMonoがすでにあるからそれで動かせるといった記事がたくさんあったOrz….

まあ、気を撮り直して、こちらは本家?コミュニティー版の.NET Coreである。しかもRaspbian(jessie)で動作させる。Ubuntuではない。

まず動作させるのにこの必要なもののページを参考に、必要なパッケージをインストール。パッケージは下記の通りこのページのUbuntuの項のものすべてをインストール。

  • libunwind8
  • libunwind8-dev
  • gettext
  • libicu-dev
  • liblttng-ust-dev
  • libcurl4-openssl-dev
  • libssl-dev
  • uuid-dev
  • unzip

次に、Raspbian上で、.NET用にディレクトリを作成。

pi@raspberrypi:~ $ mkdir /home/rasberrypi/dotnet

で、このページ下部のDaily BuildからUbuntu 14.04 (arm32)のtarballをダウンロード。

私はブラウザからダウンロードしたので~/Downloadsフォルダにダウンロードされた(ファイル名はdotnet-ubuntu-latest-arm.tar.gz)。そしたらダウンロードしたファイルを上記で作成したdotnetフォルダに展開。

pi@raspberrypi:~ $ tar -xvf ~/Downloads/dotnet-ubuntu-latest-arm.tar.gz -C ~/dotnet

これでRaspbian Jessie上で動作させる準備はととのった。

Raspbian上で動作するSDKはまだ無いそうな。そこで、今回はDebian Jessie(AMD64)なPCでサンプルプログラムを作成・ビルドをする。

まず、.NET Core Chrisの「How to install .NET Core on Raspberry Pi」のHelloWorldプログラムを作成するが、このプロジェクト用のディレクトリを作成して(HelloWorldとする)、そのディレクトリに移動

AMD64:~/dotnet $ mkdir HelloWorld; cd HelloWorld

プロジェクト用ディレクトリの初期化

AMD64:~/dotnet/HelloWorld $ dotnet new

するとそのディレクトリにProgram.csというファイルができる。

AMD64:~/dotnet/HelloWorld $ ls
Program.cs   project.json

そのファイルを適当なエディタで開き、次のプログラムをコピペ、保存。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace helloworld
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.Write("Hello World!!" + Environment.NewLine);
        }
    }
}

保存したら

AMD64:~/dotnet/HelloWorld $ dotnet restore
AMD64:~/dotnet/HelloWorld $ dotnet publish

のコマンドを連発。すると現在のフォルダ(HelloWorld)の中にbin/Debug/netcoreapp1.1/publishというフォルダが作成され、そのなかにpublishされた(?)ファイルが保管される。そのなかの、この場合HelloWorld.dllというのが実行ファイルである。

AMD64:~/dotnet/HelloWorld $ ls bin/Debug/netcoreapp1.1/publish/
HelloWorld.deps.json  HelloWorld.runtimeconfig.json
HelloWorld.dll        HelloWorld.runtimeconfig.json~
HelloWorld.pdb

ここで終わりではなく、プログラムを実行させる環境に合わせて設定ファイル?を編集する必要がある。同フォルダの中にHelloWorld.runtimeconfig.jsonというファイルがあり、中身は

{
"runtimeOptions": {
  "framework": {
    "name": "Microsoft.NETCore.App",
    "version": "1.1.0"
  }
}

となっているはず。この”version”のコロン(:)の右側をRaspbian Jessieに準備したdotnetのバージョンにする必要がある。

バージョンを調べるには、raspbianにもどり、仮想ターミナル上で一番最初ぐらいに作成した~/dotnetフォルダに移動して、そこから

pi@raspberrypi:~/dotnet $ ./dotnet –info

を実行すると確認できる。

 

私の場合はバージョンは”2.0.0-preview1-001967-00″であった。そこで、上記jsonファイルのバージョンを書き換えて以下のようにして保存。中身は

{
"runtimeOptions": {
  "framework": {
    "name": "Microsoft.NETCore.App",
    "version": "2.0.0-preview1-001967-00"
  }
}

となるはず。

そこで、Raspbianの~/dotnetフォルダに、Debian機の~/dotnet/HelloWorld/bin/Debug/netcoreapp1.1/publishフォルダそのものをSCPなどでコピー。
Raspbianの仮想ターミナルから、いまコピーしたフォルダpublishを紛らわしいのでHelloWorldへリネーム。

pi@raspberrypi:~/dotnet $ mv publish HelloWorld

そして、やっとプログラムの実行。

pi@raspberrypi:~/dotnet $ ./dotnet HelloWorld/HelloWorld.dll

ようやくRaspbian上で実行できた!!「HelloWorld!!」が表示された!!

2017-04-12-132503_655x390_scrot

ただ、コマンドをキーイン・エンターキーを押してから「Hello World!!」が表示されるまでには0.5秒ぐらいのタイムラグがあるのが微妙。

love

They found “love” in the debian repository.

$ apt-cache search love

love – 2D game development framework based on Lua and OpenGL

 

$ apt-cache show love

Package: love
Version: 0.9.1-3
Installed-Size: 2125
Maintainer: Debian Games Team <pkg-games-devel@lists.alioth.debian.org>
Architecture: amd64
Depends: libc6 (>= 2.17), libdevil1c2, libfreetype6 (>= 2.2.1), libgcc1 (>= 1:4.1.1), libgl1-mesa-glx | libgl1, libluajit-5.1-2, libmodplug1, libmpg123-0 (>= 1.13.7), libopenal1 (>= 1.14), libphysfs1, libsdl2-2.0-0 (>= 2.0.0), libstdc++6 (>= 4.9), libvorbisfile3 (>= 1.1.2)
Recommends: binfmt-support
Description-en: 2D game development framework based on Lua and OpenGL
LÖVE was created to be a user-friendly engine in which simple (or
complicated) games could be made without having extensive knowledge
of system or graphics functions and without having to dedicate time
towards developing the same engine features time and time again.
.
Developed with cross-platform implementation in mind, it utilizes the
latest open source libraries to deliver a similar game experience,
independent of operating system. By relying on the Lua scripting language
for game-specific programming, it allows even the novice game creator to
quickly and efficiently develop an idea into a fully working game.
Description-md5: 4f24e64a361db187391602e346a2e02f
Homepage: http://love2d.org/
Tag: uitoolkit::sdl
Section: games
Priority: extra
Filename: pool/main/l/love/love_0.9.1-3_amd64.deb
Size: 583612
MD5sum: c3f19b470e244a81f430313e6a647e13
SHA1: 78a671a2d3237e9b8cf132f3d9e11e0b2ae2f438
SHA256: d57e3fe160145e17ff97726dab9e70d34d36825b53d41c9c8af1701b2fc63bcc

Not romantic……sigh…

 

Debianエイプリールフールネタ

Bits from Debian にエイプリールフールネタ

「Unknown parallel universe uses Debian」(未確認のパラレル宇宙でDebianが使われる」

以下拙訳

2017年4月1日土曜日 Debian Publicity チーム

国際宇宙ステーション(ISS)を運行している複数の宇宙機構から、国際宇宙ステーションより2013年に偶然ゴミとして宇宙に捨てられたラップトップPCがパラレル宇宙と接触したかもしれないとの報告があった。

このラップトップPCはDebian6を走らせておりISSのエンジニアたちはなんとか外宇宙への旅を辿った。1月の初旬、ラップトップPCの信号が消えたが2週間後に同じ場所で再受信した。ISSのエンジニアは、ラップトップPCがワームホールに出くわしてパラレル宇宙に到達、その後”何者か”がこちらに送り返したのではないかと見ている。

結果として、ラップトップPCは回収されて、初回の解析ではISSのエンジニアたちはラップトップPCはデュアルブートであることを発見した: 一つはもともとのDebianがインストールされているパーティション、もうひとつはDebianのforkつまり今日まで全く知られていない派生のディストリと見られるものがインストールされているパーティションであった。

エンジニアたちは先週Debianプロジェクトにコンタクトを取り、様々なDebianチームからの使節からなるDebianグループがその新しいDebian派生システムの調査を開始した。調査の初期の結果からは、パラレル宇宙の”何者か(または何者かの集団)”は地球のコンピュータとDebian を十分理解し、次の事柄をできることは確実である:

  • 既存のDebianシステムを新規パーティションにクローンしてGrubを使ったデュアルブートを供給。
  • デスクトップの壁紙を以前のSpacefun themeからraibow colorsのなかのものの一つへ変更。
  • もともとのDebianシステムにソースコードがあったパッケージすべてをForkすること、それらのパッケージの複数のバグにパッチを当てること、そのなかにはいくつかのトリッキーなセキュリティ問題へより多くパッチを当てているものもある。
  • 地球で使われているどの言語にも対応しない、不明の10個のlocaleの追加。そのなかの4つの言語への完全な翻訳。
  • gitバージョンコントロールシステムに未グレートされて完璧に動作するDebianウェブサイトリポジトリのコピーが/home/earth0/Documentsフォルダーに見つかった。この新しいリポジトリにはホームページにDebian micronewsを表示するコードとその他多くの改善が含まれており、JavaScriptは不要なスタイルが保持されていて、up-to-date/outdatedな翻訳のナイスな制御を提供している。Debianにすでにあるものと同様である。

この新しい宇宙をよりよく理解し彼らとコミュニケーションする方法を見つけるための活動は始まったばかりである。すべてのDebianユーザーと貢献者は今回見つかったオペレーティングシステムの調査をする努力へ招待されている。我々は、真のフリーソフトウェアの精神において、パラレル宇宙のコミュニティーと平和的にそして尊敬の念をもって一緒にやっていくための準備をするべきである。

今後の週では総決議?(General Resolution)において我々のモットーを”the multiuniversal operating system”に更新するよう提案される予定である。