【node.js】サーバサイドjavascript 4【io.js】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
サムスン、Node.jsの開発企業Joyentを買収
サムスンは、米国でNode.jsの開発企業Joyentを買収することで合意した、と発表した。
今回の買収で、サムスンは、これまでベンダーに依存してきた
ソフトウェア、特にSaaS領域での遅れを取り戻し、モバイル、IoT、
クラウドベースのソフトウェアやサービスなどの大規模な需要に
自社のクラウドプラットフォームで対応できるようになる。
Joyentは、Node.jsの開発企業で、
Dockerコンテナに最適化したクラウドサービス「Triton」と、
オブジェクトストレージを提供するクラウドサービス「Manta」が主力サービスに持つ。
https://news.thepedia.co/article/839/ 宗教上の理由でnodeはNGって言えるようになったわけか node.jsのコアモジュールhttp.request/http.getをつかってWebページ(の文字列)を取得したいのですが、
いろいろ検索してみても、
var http = require('http');
http.get('<url>', function(res) {
res.setEncoding('utf8');
res.on('data', function(body) {
console.log(body);
});
});
こんな感じの、コンソールに表示する例しか見当たらず、
文字列を変数に取り込む方法がわかりません。
他のリクエストやスクレイピングのモジュールを用いることなく、
文字列を変数に取り込んで文字列操作をするにはどうしたらいいでしょうか? 今更かよ
>>221
標準モジュール使ってしこしこ書くしかない
まあ大抵npmに便利なものが上がってるから落として使えばいいけど
しっくりこないと自分で作りたくなって結局時間が飛ぶように消える >>227
コンソール部分の代わりに変数への代入や他の関数呼び出しを行えばいい
そもそも非同期の扱い方がわかってないみたいだから質問スレ行った方がいいよ >>229
レスありがとうございます。
console.log()の部分で変数を代入しても上手くいかず、
returnで外に持ち出すこともできず、詰んでしまいました。
一旦ファイルに書き出して、読みだす方法も、まさに非同期の扱いで難儀しています。
質問スレ、どこがいいんでしょうねぇ。 >>227
コンソールに表示してるbodyに入ってんじゃないの?
取りたいものが決まってて定形なら正規表現で取れば多分一番楽だと思う。 >>230
外で定義した変数に入れれば入るけど、そうじゃない。
eventEmitterでも使って、適当な粒度のイベントにして渡したら疎になって後々使いやすいよ。 >>231,232
レスありがとうございます。
"body" に文字列が入っているのは間違いないと思いますが、
これを、後で関数の外で上手く拾うことができないのです。
たとえば、>>227 の後に "console.log(body);" としてもダメでした。
"body" が未定義となってしまうのです(この結果はなんとなくわかります)。
前もって定義した変数"body2"に"body"を代入しても、この "body2" も空でした。
return を使って、関数の外に出すことも試しましたが、
どのコールバック関数を相手にしても、上手く行きませんでした。
eventEmitter 、調べてみます。ありがとうございます。 >>233
変数で橋渡しする場合は>>232の言うように外側で書いて
callbackがそれを参照できる形にする必要がある
また>>227の最後尾にコンソールを書いた場合はリクエスト投げる前に実行されるよ
今回の場合は単に res.on('data', bodyを受け取って文字列操作する関数); でもいいと思うけど
質問スレは↓だけど荒らし(本日ID:W50SJfH+)がずっと常駐しているから注意
http://echo.2ch.net/test/read.cgi/tech/1468158373/ 非同期が全くわかってないパターンか
いるんだねこういう人 >>233
質問スレ側の人間だが、
マジレスすると質問スレで質問するのではなく、非同期を勉強し直した方がいい。
JavaScriptでは非同期が分かっていないと話にならない。
質問したところで分かるようにはならないよ。
色々console.log('test');とか置いて動作タイミングを確認してみるといい。 面倒だから普通はrequestとかsuperagentとかfetchとか使うが標準モジュールでシコるなら
var http = require('http');
http.get('<url>', function(res) {
res.setEncoding('utf8');
var body = '';
res.on('data', function(data) {
body += data;
});
res.on('end', function() {
console.log(body);
});
}); 第2引数に外側で定義した関数を指定すればいいだけなんだけど、非同期に慣れてないとこれがわかりづらいね >>234
>荒らし(本日ID:W50SJfH+)がずっと常駐しているから注意
一日中張り付いているのか?目的は何なの? レスありがとうございます。
外の関数を呼び出すことはできました。
非同期の対処はもう少し勉強します。 undeclared-variables-check入れてみたらrequireでエラー投げて笑った
そりゃ未定義だけどさ そんな、最初にやる設定が抜けてる程度の話をされましても。 サムソンがnodeの会社を買う理由ってなんだろうな。
なんかメリットあるのか? jsでサーバサイドってそんなにダメかな?
むしろaltJSでいろいろな言語から選べるしクライアントとサーバサイドの
共通コードかけるし便利だと思うんだけど
シングルスレッドなところがダメなのかとも思ったけど
cluster使ってforkすりゃCPU数分プロセス作れるし何がイカンのか クライアントとサーバーでコード共通になってもうれしいこと思いつかない 一人がクライアントとサーバーの両方を担当するなら
同じ機能を2回書かずに済んだり、同じエディタを使えたりは利点になるか
jsしか書けない人間が複数いるなら必要に応じて担当を割り当てられるか 複数言語を習得してる人間でも、同時に異なる言語使おうとすると頭の混乱起こりやすい。
やっぱ同じ言語がクライアント・サーバの両方で使えるのは良いんじゃないかな。 JavaScriptさえ知ってればnode.js経験者として採用されるのかと まぁ後はJava/C#を使いたくない場合に
TypeScriptと絡めて「硬い」コーディングがしたい場合の選択肢か バリデーションの共有ってメリットにならないか?
webAPI側のバリデーションとclient側のエラーチェックを共通コードに纏めれたほうがいい気がするんだけど。結構面倒くさいでしょバリデーション 寒チョンにデータが送られるのでバリデーションは大事ニダ 完全なバリデーションが書けるなら client/server 共通でいいだろうけど
なかなかそうもいかないから、別言語の別観点で2重にバリデーションを
するほうが安全かも知れない。 >>263
そんな手間を掛けるくらいならテストを書いたほうがいい。
サーバサイドでjsエンジンを動かしてという手もあるんでしたっけ
reactのサーバサイドレンダリングってrailsとか使うとどうしてるんだろ。 テストで何とかしようとするのは
同じ動的型付けであるRubyが辿った悲劇の二の舞 Win使いなんだけど、みんな開発環境どうしてるんです?
Winでそのまま開発?
GUIありのLinuxをバーチャルか普通にPCインストールしてそこで開発?
それともMac? 前は仮想マシンのLinux内でやってたけど今はそのまま Node.jsなんてLinux入れるまでもないじゃん 最近のwinはlinux環境入れられるんでしょ?
もうwin環境のことは気にしなくていい? すみません質問させてください!
postcssのビルドに7秒くらいかかるんですが、もっと早くする方法ありませんか?
使ってるモジュールはpostcss-importとpostcss-cssnextだけなのですがなんでこんなにかかるんでしょう。
browserifyの時も15秒くらいかかっててwatchify使ったら爆速になったので感動したのですが
postcssにもwatchifyみたいなのってないんでしょうか... >>274ですが、postcssを使っていると言いましたが具体的には
post-css-cliを使っています。
今、代わりにwebpackを利用したpostcss-loaderを使ったビルドを行ってみたら
物凄く早くてびっくりしました。(webpackも内部的にpostcssを使っていると思ってたのですが...)
ただjsにパッケージしたいわけではなく、cssファイルとして出力したいので
webpackは使いたくないです。
昨日、こんな記事を見つけました
http://blog.greggant.com/posts/2016/05/03/post-css-is-slow.html
やっぱりPostCSSって遅いんですかね?
なんかSassよりビルドが早いってことがメリットだと思ってたんですが... SassはRuby実装版とC言語実装版があるんだよ。
Ruby実装版は遅かった。
C言語実装版は爆速
PostCSSはJavaScript実装みたいだから
一般論としてC言語実装のほうが速いだろうね。 >>275
> (webpackも内部的にpostcssを使っていると思ってたのですが...)
どのプラグイン(loader)を使うかによる
> ただjsにパッケージしたいわけではなく、cssファイルとして出力したいので
> webpackは使いたくないです。
extract-text-webpack-pluginを使えば、cssを別ファイルに切り出せる webpackで指定したrequireをバンドルせずスルーするのってライブラリ書くときにやると思うけど
変換せずにES6 Modulesそのままで出力する時代になったら同様の手法ってどう実装するんだろ
import,exportはトップレベル限定だし >>278
だからwebpackにexternalsって機能が用意されてるだろ > ES6 Modulesそのままで出力する時代
webpackを使わないって話か?
それなら細切れのファイルのままで動くはずだろ。
これらのファイルをパフォーマンスのために結合したいっていう話であれば
結合するツールを通せばいいだけ。
それがwebpackだけどなw
最初からwebpackは結合ツールだろ? npm socket.io以外の方法でsocket.ioを入れる方法はあるのでしょうか?
格安VPSを借りてnodeを入れたらnpmがメモリ不足で落ちました。。。
ちなみに128MB+swap128MBです。nodeのために借りたわけじゃないので最低プランです。
nodeを少し触ってみようと思ってみたらメモリ不足だったと。。 yarnでも使ってみたら?
npmは異常にメモリ食うツールだと思ってるんで
改良されたyarnならそこら辺も改良されてるんじゃね? あと結局のところファイルがあれば十分だろうから、
互換性がある環境をローカルで用意してコピーしても動くだろうね。 httpリクエストのパラメーターをJSONで受け取りたいのですが簡単に型チェックを行うにはどうしたらいいでしょうか? node.jsってコンパイル環境なんですか?
いまいちよくわからない・・・ 最近Winでも動くようにシェルじゃなくNodeのAPIでファイル操作書いてるけど
fsはディレクトリ名の変更が面倒だな native moduleでBuffer返そうとしてるんだけど何故かUint8Arrayが返る
これどうすればいい?
v8::Local<v8::Object> lr;
v8::MaybeLocal<v8::Object> buf=node::Buffer::New(isolate, datalen);
buf.ToLocal(&lr);
memcpy(node::Buffer::Data(lr), data, datalen);
args.GetReturnValue().Set(lr);//Uint8Arrayが返る(中身自体は期待通り) args.GetReturnValue().Set(buf); 自己解決 根本的な勘違いをしてた
global掴んでbuffer引っこ抜いきつつ、変換掛けたらとりあえず動いた downloadRecの処理が終わったあとに処理をしたいのですが、何かいい方法ありますか?
var client = require('cheerio-httpcli');
var URL = require('url');
var target = "http://nodejs.jp/"
downloadRec(target, 2);
function downloadRec(url, l) {
if (l <= 0) return;
console.log(url);
client.fetch(url, {}, function(err, $, res) {
$("a").each(function(i) {
var next_url = $(this).attr('href');
next_url = URL.resolve(url, next_url);
downloadRec(next_url, l - 1);
});
});
} >>295
使って色々頑張ってみたんだがどうしてもできなかったので、どうすればいいか教えてください。 Promise直接使うみたいなアホな事する時代は終わったで
時代はasync/await >>294
function downloadRec(url, l) {
if (l <= 0) return 処理終わった後に実行する関数(); >>298
それだと処理し終わった後に実行する関数が複数回実行されないか? >>297
いやいや。段階的に移行した方がいいと知った。
先ずはPromiseを使いこなしてからasync/awaitへ
じゃないと使いこなせないし >>299
確認不足だった
$("a")のlengthを使えばできるかも すみません教えてください
node.jsでaccessのデータを扱うにはどうしたらいいでしょうか?
勉強を始めてみたもののこの部分がさっぱり分からなくて foreverで嵌まっています。
環境はCentOS6.8+node.js v4.7.2+npm 2.15.11です。
通常なら起動すると、
warn: --minUptime not set. Defaulting to: 1000ms
warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info: Forever processing file: ここにパス
が出るのが正常ですが、
最終行のinfoが出ずにコマンドが帰ってこない状態になっています。
肝心のnodeは起動しているのですが、コマンドが帰ってこないので仕方なくCtrl+Cで中断するとnodeのプロセスも止まってしまいます。
forever は-g付でグローバルインストールしており、何度か削除、再インストールを繰り返しましたがだめでした。
散々ぐぐっても解決できず数日立ち往生しています。
何か気付きがある方は知恵をお貸しください。 状況の追記です。
コマンドが帰ってこないと書きましたが、状況として、
node ここにスクリプト名
を打った時と同じ状態です。
console.logの内容がそのまま出てきます。 >>304
なんでcentosなんて使ってるの?
実環境がredhatで有料サポート受けるから開発ではcentos使ってるくち?
それならわかるけど、そうでないならcentos使うメリットなんて殆どないだろ。標準リポジトリのパッケージ少なくて結局サードパーティのリポジトリから持ってくるとか、ソースからビルドとかバカじゃないの? リポジトリ追加なんてたいした手間じゃないし
ソースからビルドも愚行でもなけりゃ別に普通だろ うちの会社はサードパーティリポジトリ認められてないな。
ソースからビルドするのはオーケーなので基本いつもビルド。 >>306
>標準リポジトリのパッケージ少なくて結局サードパーティのリポジトリから持ってくるとか、ソースからビルドとかバカじゃないの?
わろた
ほんそれ 高能力なせいかビルドでハマったこととかない
本当に申し訳ない 世界的にはとっくにubuntuとかが主流なのに日本は未だにcentosのままってとこが多いよね で、いつ目障りなio.jsとかいうゴミグループは消えるの?こいつらのやった事はnode.jsの発展と普及をいたずらに遅らせただけでしたwww
いつものコンピュータだけがお友達な根暗馬鹿の自己満足でフォークするとか辞めていただきたいね。 サーバには安全性、安定性が求められるから、
世界的に見てもエンジニアに好まれてるのはRHELクローンの方。 io.jsはとっくにnode.jsって名前に変わった >>312
現在から2年後に書き込む方法を知っているなら教えて欲しい ソースからビルド、そんなに少数かな。
俺の知ってる環境も基本はそうだった。 >>313
ガラパゴスの住人さん乙
>>318
DBサーバーなら違うって話はあり得るがここはnode.jsスレだからな
nginxと同居することも多いんだからボリュームゾーンからそう外れないだろ >>304の話もそうだけど、みんなforever大好き人間なの?
ってのも今日のTechCrunchの記事にあったKeymetricsってとこが出してるpm2ってプロセスマネージャがすんげー使いやすそうなんだけどと思ってさ。
ttp://jp.techcrunch.com/2017/02/08/20170207keymetrics-is-a-nodejs-monitoring-tool-for-your-server-infrastructure/ 普通にサービススクリプト書くかな俺は
どうせzabbix入れてるし ■ このスレッドは過去ログ倉庫に格納されています