2017-01-14 4 views
0

저는 nodejs에서 새로 왔으며 노드를 사용하여 직렬 포트에 쓰기를 원하지만 이제는 버튼에 의해 트리거되기를 원합니다. 그리고 데이터는 텍스트 상자에서옵니다. 콘솔/터미널에서 노드 스크립트를 실행할 때 노드 스크립트가 정상적으로 작동하고 있습니다. 그러나 웹 페이지의 버튼으로는이 작업을 수행 할 수 없습니다. 은 여기 페이지 (F12)의 콘솔을 열 때 내 nodejs 당신의 도움이 사전에 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> 

ReferenceError: require is not defined 

덕분에 내가 가진 오류의 내장입니다. :)

답변

0

Node.js는 JS를 실행할 수 있고 Node.js 특정 API를 제공하는 호스팅 환경입니다. 브라우저는 다른 API 환경과 다른 호스팅 환경입니다. 브라우저에서 Node의 특정 API를 사용할 수없고 Node API를 사용하는 JS는 브라우저에서 오류를 발생시킵니다.

예를 들어 스크립트는 브라우저 API에서 사용할 수없는 전역 require 함수를 사용하고 있습니다.

ReferenceError: require is not defined

는 반대로, 스크립트뿐만 아니라 노드에서 실행할 수 없습니다이 브라우저 API 사용하기 때문에, : :

document.getElementById("textbox1")

당신은 하나의 스크립트에서 서로 다른 환경에서 혼합 된 API의의를했습니다를 이유입니다.

그러나 JS 스크립트가 노드 또는 브라우저 특정 API를 사용하지 않으면 오류없이 노드와 브라우저에서 모두 실행할 수 있습니다. 그러나 귀하의 스크립트에서는 그렇지 않습니다.

스크립트를 두 개의 개별 스크립트로 분할하고 브라우저에서 실행하고 Node.js에서 실행하여 XMLHttpRequest을 사용하여 데이터를 교환 할 수 있습니다.

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 마지막 단락에서 NodeJS 스크립트 (노드 js 스크립트,

1

NodeJS는 브라우저가 아닌 JavaScript 환경입니다. 대부분의 NodeJS 기능은 브라우저 환경에서 사용할 수 없기 때문에 사용할 수 없습니다.

대신 웹 요청을 수신 할 수 있도록 NodeJS 프로세스를 실행하여 웹 엔드 포인트 (예 : 웹 서버, 아마도 Express를 사용하지만 사용자는 필요하지 않음)를 제공하고 NodeJS 프로세스를 실행할 수 있습니다. 그런 다음 작업을 수행하는 NodeJS 서버에 대한 ajax 호출을 수행하는 웹 페이지에 버튼이 있습니다.

당연히 서버 프로세스가 실행중인 시스템에서만 작업을 수행 할 수 있습니다.

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 실제로 웹 페이지에 액세스 할 수있는 다른 장치 (동일한 네트워크에 연결되어 있음)를 원합니다. Express는 나 같은 초보자를위한 최고의 솔루션입니까? – Blanket

+0

@Blanket : "최상"이라고 말할 수는 없지만 NodeJS를 사용하여 웹 서버를 구축하는 데는 매우 사용하기 쉽고 매우 자주 사용됩니다. –

+0

안녕하세요, 감사합니다. 나는 급행을 공부하기 시작할 것이다. – Blanket

-1

어쩌면 그냥 POC 만약 내가 앱이 성장할 알고하지 않거나,보기에서 논리를 분리해서하려고, 다른 한편에서는 https://wzrd.in/standalone/[email protected]

에서하여 SerialPort 모듈을 수입하지만,의 MessageBroker를 사용하거나 엔진을 사용하여 행동 견해를 묶는 소켓?

희망 하시겠습니까?

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 귀하의 링크도 http://www.npmjs.com/serialport를 의미 했습니까? – Blanket

+0

안녕하세요 :) 예. 똑같습니다! 나는 설명을하지 않고 -1을 넣는 사람들을 좋아하지 않는다 : ( – Mech45

+0

나는 형제를 모른다. – Blanket