使用参数向GET服务器发送GET

时间:2017-11-21 14:28:28

标签: javascript node.js http-get

我正在尝试代码基础知识,并希望编写一些基本的客户端 - 服务器应用程序。 我有一个HTML页面,用户输入两个数字(num1num2),然后传递给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);

2 个答案:

答案 0 :(得分:1)

如果你想要像你这样的简洁代码,你需要使用像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是a的变量参数 功能。但是,我们没有声明变量num1

  • 参数以字符串形式出现,除非您将它们解析为整数, 你将有字符串连接和223作为结果

  • res.writeres.end需要一个 字符串输入,因此您需要在计算后解析回字符串。

答案 1 :(得分: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);