使用参数发送GET到HTTP服务器

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

如果你想要一个像你的简洁的代码,你需要使用像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是一个函数的variables参数。 但是我们没有声明variablesnum1

  • 参数以stringforms出现,除非将其parsing为整数,否则将有string连接和223结果

  • res.writeres.end需要一个stringinput,所以你需要在计算后parsing回string。

你必须使用url模块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);