2017-11-21 18 views
1

私はコードの基本を試していて、基本的なクライアントサーバアプリケーションを書いています。 ユーザーが2つの数字(num1num2)を入力するHTMLページがあり、JSに渡され、NodeJSで書かれたHTTPサーバーに渡されます。サーバー上では、番号を追加してHTMLページに戻す必要があります。しかし、サーバーは次のエラーを返します。HTTPサーバへのパラメータでGETを送信する

ReferenceError: num1 is not defined

コードに何が問題なのですか?ここで

はJSコードです:

function myFunction(num1, num2) { 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     num1 = Math.floor(num1); 
     num2 = Math.floor(num2); 
     document.getElementById("result").innerHTML = this.responseText; 
    } 
    }; 

    xhttp.open("GET", "http://localhost:8080?num1=2&num2=3", true); 
    xhttp.send(); 
} 

そしてここではNodeJSコードは次のとおりです。

var http = require('http'); 

http.createServer(function (req, res) { 
    var resnum = 2 + req.params(num1) + req.params(num2); 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    res.write(resnum); 
    res.end(); 
}).listen(8080); 
+1

'req.query.num1;'を使用してください。 'req.params'はurlから変数/パラメータを取得することだけです。 – Eyzi

+0

これは確かに役立ちますhttps://stackoverflow.com/questions/6912584/how-to-get-get-query-string-variables-in-express-js-on-node-js –

+0

@Eyzi変数を取得する/ urlからのパラメータは正確に私が必要とするものではありませんか?とにかく、req.query doesn'ttoneどちらも、同じエラーを返します。 –

答えて

0

あなたがしたい場合https://nodejs.org/api/http.html#http_message_url

var http = require('http'); 
var url = require('url'); 

http.createServer(function (req, res) { 
    var params = url.parse(req.url, true).query; 

    var resnum = 2 + params.num1 + params.num2; //or 2 + parseInt(params.num1) + parseInt(params.num2) 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    res.write(resnum); 
    res.end(); 
}).listen(8080); 
1

URLモジュールを使用する必要がありますあなたのような簡潔なコードは、Expressフレームワークのようないくつかのモジュールを使用する必要があります。

var express = require('express') 
var app = express() 

app.get('/', function (req, res) { 
    const resnum = 2 + parseInt(req.query.num1) + parseInt(req.query.num2); 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    res.end(resnum.toString()) 
}) 

app.listen(8080) 

あなたが「HTTP」モジュールを使用している場合にのみ、あなたと仕事をしなければならない唯一の事はreq.urlです。あなたは、ハードしようとすると、URLを破壊することにより、パラメータを取得するが、あなたは長いコードを持っているでしょうができます

var http = require('http'); 

http.createServer(function (req, res) { 
    const step1 = req.url.split('?')[1] //step1 = num1=2&num2=3 
    const step2 = step1.split('&') // step2 = [num1=2,num2=3] 
    let result = {}; 

    step2.forEach((val) => { //break down strings further and put into result object 
    const value = val.split('=') 
    result[value[0]] = value[1] 
    }) 
    var resnum = 2 + parseInt(result.num1) + parseInt(result.num2); 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    res.end(resnum.toString()); 
}).listen(8080); 

いくつかの注意:

  • num1は、可変引数であるため、あなたはそのエラーを取得します 機能に追加します。しかし、変数num1が宣言されていません。あなたは整数にそれらを解析しない限り

  • パラメータ あなたは、計算後の文字列に戻って解析する必要があるので、

  • res.writeres.endが 文字列の入力を必要とし、結果として、文字列の連結と223を持つことになり、文字列として来ます。
関連する問題