2017-01-14 3 views
0

私はnodejsで新しく、ノードを使用してシリアルポートに書きたいと思っていますが、ボタンでトリガされるようにします。そしてデータはテキストボックスから来ています。 コンソール/ターミナルでノードスクリプトを実行しているときに、自分のノードスクリプトが正常に動作しています。しかし、Webページのボタンではできません。ここで HTMLでhtmlボタンを使用してノード関数を実行する方法

<!DOCTYPE html> 
<html> 
<head> 
    <title>Node x HTML</title> 
</head> 
<body> 

    <script> 
    function write_serial() 
    { 
     var serialport = require("serialport"); 
     var SerialPort = serialport.SerialPort; 

     var sp = new SerialPort("/dev/ttyACM0", { 
      baudrate: 9600, 
      parser: serialport.parsers.readline("\n") 
     }); 

      var text = document.getElementById("textbox1").value; 

      sp.on('open', function() 
      { 
       sp.on('data', function (data) 
       { 
        sp.write(name); 
       }); 
      }); 
    } 

    </script> 

    <Input Type = "text" id = "textbox1" > 
    <BR> 
    <br><button onclick="write_serial();" href="javascript:;">Go!</button> 
</body> 
</html> 

を埋め込まれた私のnodejsだここで私はページ(F12)あなたの助けを事前に

ReferenceError: require is not defined 

感謝のコンソールを開いたときに私が得たエラーです。 :)

答えて

0

Node.jsはJSを実行し、Node.js固有のAPIを提供するホスティング環境です。ブラウザは、異なるAPIの異なるホスティング環境です。ブラウザでNode固有のAPIを使用することはできません。また、Node APIを使用するJSではブラウザでエラーが発生します。

たとえば、ブラウザではグローバルrequireという機能が使用されていますが、これはブラウザAPIでは使用できません。そして、それが理由です:それは、ブラウザのAPIを使用していますので、逆に

ReferenceError: require is not defined

、あなたのスクリプトは、同様にノード上で実行することはできません。

document.getElementById("textbox1")

あなたは1つのスクリプト内の異なる環境から混合APIをしました。

ただし、JSスクリプトでノードまたはブラウザ固有のAPIを使用しない場合は、ノードとブラウザの両方でエラーなく実行できます。しかし、あなたのスクリプトではそうではありません。

問題を解決するには、スクリプトを2つのスクリプトに分割し、ブラウザで実行し、Node.jsで実行し、XMLHttpRequestを使用してデータを交換することができます。

+0

こんにちは、返信ありがとうございます。 最後の段落で、NodeJSスクリプト(ノードjsスクリプト、私は

1

NodeJSは、ブラウザ以外のJavaScript環境です。ほとんどのNodeJS機能は、ブラウザ環境では使用できないため、使用できません。

代わりに、Webエンドポイントを提供するローカルNodeJSプロセス(たとえば、Webサーバー、おそらくExpressを使用していますが、そうする必要はありません)を持って、そのNodeJSプロセスを実行してWebリクエストを待ちます。次に、あなたのWebページに、NodeJSサーバーへのajax呼び出しを行うボタンがあります。これは作業を実行します。

これは当然、サーバープロセスが実行されているマシンでのみ作業を実行できるようにします。

+0

こんにちは、返信いただきありがとうございます。 私は実際には(同じネットワークに接続されている)別のデバイスがウェブページにアクセスしたいと思っています。 Expressは私のような初心者のための最善のソリューションですか? – Blanket

+0

@Blanket:「ベスト」とは言えませんが、NodeJSを使用してWebサーバーを構築するためには非常に使いやすく、頻繁に使用されます。 –

+0

こんにちは、ありがとう。私はエクスプレスを勉強し始めます。 – Blanket

-1

たぶん、一方でhttps://wzrd.in/standalone/[email protected]

からSERIALPORTモジュールをインポートし、ビューからロジックを区切るしようとすると、アプリケーションが成長するかどうかは知らないか、それだけでPOCだ場合は、しかし、のMessageBrokerを使用しますか、あなたの行動をエンジンと結びつけるソケット?

希望します。

+0

こんにちは返信いただきありがとうございます。 あなたのリンクはhttp://www.npmjs.com/serialportも意味します – Blanket

+0

ちょっと:)同じもの!私は説明をせずに-1を置く人々が好きではない:( – Mech45

+0

私は仲間を知らない。 – Blanket

関連する問題