#CommonJSとECMAScript
JavaScriptにはサーバサイドのNodeJS(CommonJS)とブラウザのJavaScript(ECMAScript)の二つの言語仕様がある.
二つはモジュール機能(JavaScriptファイルを外部参照する機能)の記述に関して大きな違いがある.
##CommonJSのモジュール機能
CommonJSでモジュールを外部参照できるようにするためには,主にmodule.exportsを使う.
“`Javascript:abc.js
module.exports = 変数1, 変数2, ...
“`
CommonJSでモジュールを参照するためには,requireを使う.
requireで参照するモジュールのファイル名を指定することで,module.exportsした変数そのものを参照することができる.
“`Javascript:
const abc = require(‘abc’)
“`
##ECMAScriptのモジュール機能
ECMAScriptでモジュールを外部参照できるようにするには,主にexportもしくはexp
下記を`cypress.js`に追加すると解決する。
“`javascript
{ “modifyObstructiveCode”: false, }
“`
詳しくは読んでないが、下記issueに書いてあった。
https://github.com/cypress-io/cypress/issues/1543
## 経緯
試しにCypress使ってお願いされたサイトのテストを書いていたら、特定の文字のみ文字化けする。
怪しいところがないか調べたところ、``が指定されている。
超怪しい。
ということで、Charset周りのことを調べてたら上に行き着いて解決しました。
[aws-sdk-mock](https://github.com/dwyl/aws-sdk-mock)を使ってもS3(にアクセスするAWS SDK)がモックに挿し変わらずに困り果ててました・・。
明示的にaws-sdkのパスを指定することで解決しました。
“`javascript:jestのテストコード
const awsMocker = require(‘aws-sdk-mock’);
// 【ここがポイント】 以下のようにaws-sdkのパスを明示的に指定する必要がありました。
const path = require(‘path’);
awsMocker.setSDK(path.resolve(‘node_modules/aws-sdk’));
const testee = require(‘テスト対象ファイルへのパス’);
// その他 略
describe(‘S3の画像保存テスト’, () => {
describe(‘正常時’, () => {
it(‘putObjectを1回だけ実行する’, async done => {
先日、WEBサイト制作者向けのウェブサービスをリリースしたのですが、その制作過程で得た知見をシリーズで発信していく記事の第3弾になります。
個人開発でウェブサービスにトライしてみたいと考えている方の参考になりましたら嬉しいです。
Node.jsサーバでWebSocketを使用する際、httpのセッションデータをWebSocketでも読み込みたいという場面が出てくると思います。
今回の記事では、httpセッションをWebSocketで共有(正確に言うとWebSocketからはReadOnly)する方法について書いてみたいと思います。
## Redisをセッションストアとして使う
実はRedisを使わなくても実現できるのですが、以下の理由によりRedisを使うこととします。
– Nodoサーバで全部受け止めるのではなく負荷を分散させておきたい
– 開発時にNodeサーバを起動し直してもセッションを維持できて便利
– 複数のNodeサーバでセッションを共有できるので、機能によってサーバ(コンテナ)を分けられる
Redisをひとことで説明すると、ネットワーク接続されたインメモリデータス
初めての投稿なので、至らぬ点があるかと思いますが、温かい目で見て頂ければ幸いです。
EXCELで課題管理を行っていますが、プロジェクトメンバー共有で使っています。
誰かが開きっぱなしだったりすると編集出来なくてちょっと面倒です。
今回はNode.jsとSQLiteを使って、誰でもいつでも課題管理への登録が出来るようなものを目指して作ってみました。
環境はWindows10で行っています。
## 使うもの
私が動作を確認した構成は以下の通りです
– npm:6.4
– Node.js:8.xx
– Express:4.16
– SQLite:3.22
## SQLiteのインストール
公式サイトに行ってダウンロード&インストールを行ってください。
## DBとテーブルの作成
今回はToBe方式での課題管理を行うことを想定し、以下のカラムを用意します。
– 課題
– 理想の姿
– 理想とのギャップ
– 解決策
インストールフォルダをカレントディレクトリにします。
まずDBを作りたいので、以下のコマンドを発行します。
“`sql
sqlite3 kadai
# はじめに
ざっと自己紹介をすると
– 高校2年生
– JS書いてます
– [Twitter](https://twitter.com/AlGoRiT94422608)
– [GitHub](https://github.com/kota-yata)
# きっかけ
現在僕は給料計算とカレンダーのwebアプリを開発中で、カレンダーについては[FullCalendar](https://fullcalendar.io/)で行けたんですが給料計算に関しては国ごとに法律が違うこともあってライブラリやモジュールがありませんでした。モジュールが無いなら自分で作るしかなくて、どうせならnpmパッケージにして公開しようと思い立ったので開発しました。
# 沼ったところ
そもそも僕はnpmパッケージとかモジュールなんて一度も作ったことがなく、どうやってパッケージにするかも全くわからなかったので、ローカルでinitするところからGoogle先生の力を借りなければならなかった訳です。参考にしたサイトは以下のような感じです。
– [初めてのnpm パッケージ公開](https://qiita.com
This is a step by step MEVN stack tutorial, in this tutorial, we are going to learn how to create MEVN stack app. (MongoDB, Express.js, Vue.js, Node.js).
click here to read more
Vue MEVN Stack Tutorial – Build Full Stack Vue.js CRUD App
#背景
Node.jsという最近キテそうな言語を使いこなして、高級寿司を食えるかっこいいエンジニアになりたいので勉強がてらシンプルなWebアプリケーションを作った。あと、WebアプリケーションらしくHerokuにもデプロイしたいと思った。
JEPG画像のアップロードなんて余裕でしょって思っていたらめちゃくちゃ躓いたので、すべての記憶を失っているであろう未来の僕に対して記録を残す。ごちゃごちゃ書くので見づらいと思います。ごめんなさい。
#環境
OS:Windows 10 Pro (64bit)
プロセッサ: Core i5 3.20 GHz
メモリ: 24.0 GB
“`
$ node -v
v12.16.2
“`
“`
$ npm -v
4.0.5
“`
“`
$ express –version
4.16.1
“`
#作り方
## 1. express-generatorを使う
「巨人の肩に乗っていけぇ~」ということで
こちらの通りにやると大体できました。
[[Node.js] express + Multer を使用してファイルアップロード API を作成する
どうもこんばんは、cedです。
今回はlinux系で使われるシェルスクリプトの「あれ」をnodejsやpythonのファイルにつけて実行してみようっていう記事です。
※これはwindowsでする場合、WSLが必要になります。
# 実行環境
os: ubuntu 19.10 / arm64(Android)
python: 3.7.5
nodejs: 12.16.2
# さっそくHello Worldを書いてみる
## の前にファイルに権限与える
“`bash:nodejs
touch index.js
chmod +x index.js
“`
“`bash:python
touch index.py
chmod +x index.py
“`
## nodejsの場合
“`js:index.js
#!/usr/local/bin/node
//nでインストールしていない場合はlocalは要らない
console.log(“Hello Woeld!”);
“`
#pythonの場合
“`py:index.py
#!/usr/bin/python3
print(“H
#背景
[この](https://avinton.com/blog/2019/07/tensorflow-js/)記事みて、TensorFlow.jsめっちゃいいじゃんと思ってNode.jsも最近触ってるし[チュートリアル](https://www.tensorflow.org/js/tutorials/setup)やってみようとしたら初手でつまづいてキレそうになったので、メモ。
ちなみにWindows10とMacでやってWindowsはいまだに解決できないので、誰か教えてくらはい。
#環境
PC: MacBook Air (Retina, 13-inch, 2018)
OS: macOS Catalina (ver 10.15.4)
プロセッサ: 1.6 GHz Intel Core i5
メモリ: 16 GB 2133 MHz LPDDR3
“`
$ node -v
“`
>v10.16.0
“`
$ nmp -v
“`
>6.9.0
#つまづいたこと
Node.jsを使っていてnpmの人は下記をすればいいと書いてあったので、実行したらERR!がクソほどでた。
#はじめに
* JIRAの一括変更でグループメンバーへのウォッチャー割り当てができなかったためREST APIで実装してみました。
#実施環境
* 実施環境、事前準備は[JIRA REST APIで課題情報を取得(jira-client-npm を使用)](https://qiita.com/UC-SADA/items/1824aa5d5f3b2b21afef)を参考にして下さい。
# 作業の流れ
1. getUsersInGroup関数を使ってメンバーのaccount_idの抽出
2. searchJira関数を使って未ウォッチタスクの抽出
3. addWatcher関数を使ってウォッチャーの割り当て
4. mainでそれぞれの関数をasync/awaitで同期処理。
## getUsersInGroup
* グループ内のaccount_idの抽出
* 同期処理をするためにPromiseを用意しておく。
“`index.js
// グループメンバーの抽出
function getUsersInGroup(groupName) {
return new Promise(
2020年もなると文字コード関連のノウハウなんてものはすっかりプログラミングサイト上からも消えています。世間は当たり前のようにutf-8化しています。いまだにutf-8化していないのはwindowsの一部くらいなものでしょう。
で、webの世界は当然utf-8で全部済むと思っていたのですが、最近、node-fetchでeuc-jpのページを拾ってくる作業にぶつかりました。node-fetchとはnode.jsでjavascriptのfetch関数を使うライブラリです。fetchとはXMLHttprequestのモダンなやつです。
こういう場合はfetchにURL渡して引っ張ってきてその文字列を何かのライブラリーで変換というのがセオリー中のセオリーですが、そんなのは20世紀のプログラミングらしいです。perlのJcodeとかの時代のセオリーのようです。
モダンなプログラミングというのは「誰かがどこかで勝手にutf-8に変換してくれてる」というもので、特にウェブの場合はhtmlに文字コードがcharsetとして記載されており、それを読んで変換、あるいはソースの文字コード自動判別して現
# TL;DR
Node.js も Redis もシングルスレッドなので、 Node 1プロセスにつき接続ひとつでよい。
トップレベルで `createClient` をして、その先で使えばよい。
# 本文
[Redis](https://redis.io/) はよく使われるインメモリデータストアです。
ふつうの DB (Postgres とか)だとコネクションプールを普通に使うので、 Redis にもあるのかなーと思って [node-redis のドキュメント](https://redis.js.org/)を見に行くとコネクションプールに関する記載がない。
どういうこっちゃと思って GitHub の issue をあさりに行くと、その理由がありました。
[connecting pool · Issue #1354 · NodeRedis/node-redis](https://github.com/NodeRedis/node-redis/issues/1354)
>
Since Node and Redis are both (practically) single-thre
Node.jsの`child_process`モジュールの`fork`で起動した子プロセスにて、例外が発生したとき、その例外を親プロセスに送る方法です。
“`js
const { fork } = require(‘child_process’)
if (process.send) {
// 子プロセスの処理
process.on(‘uncaughtException’, error => {
process.send(error) // 例外はメッセージとして送る
process.exit(1)
})
throw new Error(‘Something wrong’)
} else {
// 親プロセスの処理
const childProcess = fork(__filename, [], {
serialization: ‘advanced’ // このオプションが必須
})
// 例外はメッセージとして受け取る
childProcess.on(‘message’, message => {
if
|