Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将带有参数的GET发送到HTTP服务器_Javascript_Node.js_Http Get - Fatal编程技术网

Javascript 将带有参数的GET发送到HTTP服务器

Javascript 将带有参数的GET发送到HTTP服务器,javascript,node.js,http-get,Javascript,Node.js,Http Get,我正在尝试基本的代码,并想编写一些基本的客户机-服务器应用程序。 我有一个HTML页面,用户在其中输入两个数字(num1和num2),然后将其传递给JS,JS将其传递给使用NodeJS编写的HTTP服务器。在服务器上,数字应该被添加并返回到HTML页面。但服务器返回此错误: ReferenceError:未定义num1 代码有什么问题 以下是JS代码: function myFunction(num1, num2) { var xhttp = new XMLHttpRequest();

我正在尝试基本的代码,并想编写一些基本的客户机-服务器应用程序。 我有一个HTML页面,用户在其中输入两个数字(
num1
num2
),然后将其传递给JS,JS将其传递给使用NodeJS编写的HTTP服务器。在服务器上,数字应该被添加并返回到HTML页面。但服务器返回此错误:

ReferenceError:未定义num1

代码有什么问题

以下是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);

您必须使用url模块


如果你想要一个简洁的代码,你需要使用一些模块,比如
Express
framework

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

  • 参数以字符串形式出现,因此除非将其解析为整数, 结果是字符串连接和
    223

  • res.write
    res.end
    需要一个 字符串输入,所以您需要在计算后解析回字符串

使用
req.query.num1
req.params
只是从url获取一个变量/参数。这将帮助您确定@Eyzi从url获取一个变量/参数听起来正是我所需要的,不是吗?无论如何,req.query也不起作用,给出了相同的错误。
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);