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