Javascript 将带有参数的GET发送到HTTP服务器
我正在尝试基本的代码,并想编写一些基本的客户机-服务器应用程序。 我有一个HTML页面,用户在其中输入两个数字(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();
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);