🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

3303閲覧

Javascriptのrequireを使いたい

atmn3356

総合スコア157

Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/05/29 09:12

編集2018/05/30 02:26

前提・実現したいこと

htmlで作成したフォーム(index.html)から入力した値を、
Node.jsで記述したPDF作成処理(createPdf.js)に渡したいと考えています。
(※js内でWebサーバーをたてています)

発生している問題・エラーメッセージ

普通に記述しただけでは「ReferenceError: require is not defined」というエラーが出るため、エラーの出ない方法を探しています。

Browserifyを使用したところrequireのエラーは消えましたが、
「TypeError: http.createServer is not a function」というエラーが出ます。

該当のソースコード

長い為、一部抜粋して掲載いたします。

html

1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta http-equiv="content-type" charset="utf-8"> 6 <title>testページ</title> 7 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 8 <script type="text/javascript" src="./bundle.js"></script> 9</head> 10<body> 11 <form id="form1" name="form1"> 12  <input type="text" name="q4_2_other" size="50"> 13  <input type="submit" name="btn" id="btn" value="送 信" onclick="createPdf()"> 14 </form> 15 <script> 16 $('#form1').submit(function(event) { 17 var formData = $('form1').serialize(); 18 // ここでsubmitをキャンセルします。 19 event.preventDefault(); 20 // Ajax処理 21 $.ajax({ 22 url: 'http://localhost:8080/', 23 type:'POST', 24 dataType: 'json', 25 data: formData, 26 timeout:10000 27 }); 28 }); 29 </script> 30</body> 31</html>

javaScript

1var PDFDocument = require('pdfkit'); 2var fs = require('fs'); 3var http = require("http"), 4 url = require("url"), 5 path = require("path"), 6 port = process.argv[2] || 8080; 7 8http.createServer(function(request, response) { 9 var Response = { 10 "200":function(file, filename){ 11 var extname = path.extname(filename); 12 var header = { 13 "Access-Control-Allow-Origin":"*", 14 "Pragma": "no-cache", 15 "Cache-Control" : "no-cache" 16 } 17 18 response.writeHead(200, header); 19 response.write(file, "binary"); 20 response.end(); 21 }, 22 "404":function(){ 23 response.writeHead(404, {"Content-Type": "text/plain"}); 24 response.write("404 Not Found\n"); 25 response.end(); 26 27 }, 28 "500":function(err){ 29 response.writeHead(500, {"Content-Type": "text/plain"}); 30 response.write(err + "\n"); 31 response.end(); 32 33 } 34 } 35 36 37 var uri = url.parse(request.url).pathname 38 , filename = path.join(process.cwd(), uri); 39 40 fs.exists(filename, function(exists){ 41 console.log(filename+" "+exists); 42 if (!exists) { Response["404"](); return ; } 43 if (fs.statSync(filename).isDirectory()) { filename += './index.html'; } 44 45 fs.readFile(filename, "binary", function(err, file){ 46 if (err) { Response["500"](err); return ; } 47 Response["200"](file, filename); 48 }); 49 50 }); 51 52 53}).listen(parseInt(port, 10)); 54 55console.log("Server running at http://localhost:" + port ); 56function createPdf(){ 57 58// 以降、pdf作成処理 59 60} 61

補足情報(FW/ツールのバージョンなど)

browserify:ver.16.2.2
Node.js:v7.2.1

Webサーバーを立てた状態でrequireを使用できる方法をご存知の方、
ご教授宜しくお願い致します。

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

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

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

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

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

sii_side

2018/05/29 09:57

サーバー/クライアントそれぞれのソースコードを提示してください。もしかして、Node用のスクリプトをブラウザに読ませているのでしょうか?
atmn3356

2018/05/30 02:28

sii_side様、コードを追記致しました。>もしかして、Node用のスクリプトをブラウザに読ませているのでしょうか? 不可能ではないようなので、そうしたいと考えているのですが・・・
guest

回答1

0

HTML側で require したところで、Node.js のコードは動かないと思いますので、HTML 側から、サーバーに AJAX で POST リクエスト送信して、サーバー側でそれを受信・処理した後に HTML 側にレスポンスを返すのが良いと思います。


ソースコードを見てみたところ、フロントエンドのAJAX部分は問題ないと思います。
問題はサーバー側で、これでは POST されたフォームの内容を受信できません。

http.createServer で自力で書くと大変なので、Express でサーバーを立てると良いでしょう。
詳しくは Express の API リファレンスを参照。

javascript

1var express = require('express'); 2var bodyParser = require('body-parser'); 3var app = express(); 4 5// POST リクエストで送信されたデータを 6// パースして扱いやすい形にする (今回は JSON が送信されてくるので Object になります) 7app.use(bodyParser.urlencoded({ extended: true })); 8 9// ルート '/' に対する POST レスポンスを設定 10app.post('/', function(request, response) { 11 12 // request.body で formData の内容を参照できます 13 console.log(request.body); 14 15 // なんらかの処理 16 . 17 . 18 . 19 20 // レスポンスヘッダーのセット 21 response.set({ 22 'Content-Type': 'text/plain', 23 . 24 . 25 . 26 }); 27 28 // レスポンスを返す end() は不要 29 response.status(200).send('レスポンスの内容'); 30 31 // or 何もデータを返さない場合は end() を使います 32 response.status(404).end(); 33 34}); 35 36// ポート 8080 でサーバー立ち上げ 37app.listen(8080);

投稿2018/05/29 15:40

編集2018/05/30 03:26
yhg

総合スコア2161

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

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

atmn3356

2018/05/30 02:32

分かりやすいご回答ありがとうございます。 Ajaxの処理は記述しているつもりなのですが、いまいちよく理解出来ていません…。 参考にできるサイト等ありますか? もしご存知でしたらコメント頂けると助かります。
atmn3356

2018/05/30 06:27

追記ありがとうございます。 図々しくも追加の質問なのですが、記載いただいたExpressでサーバーを立てる処理は、Browserifyを使用しない方法という認識で良いのでしょうか? また、既存のNode.jsのファイル(createPdf.js)のhttp.createServerでサーバーを立てている部分に置換すればいいのでしょうか。 度々申し訳ございませんが、何とぞ宜しくお願い致します。
yhg

2018/05/30 08:40

Browserify は使いません。 私が書いたコードに加えて、静的ファイルを配信するコードも必要ですが、サーバー部分を置換するのが手っ取り早いです。 要は、API サーバーを作る感じですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問