我创建了一个使用客户端速度、位置和ISP的互联网速度测试应用程序。问题是,当执行此代码时,它会获取数据中心所在位置的速度、ISP和位置(在我的示例中是通过Heroku在弗吉尼亚州的AWS服务器)。我的想法是,我需要这段代码在客户端的浏览器端而不是在服务器端执行。是否可以使用Express、Mongoose和EJS?
相关代码发布在下面。这是来自我的控制器的。我没有包括其余部分,因为它只是一些单独的/呈现代码的逻辑。
function index(req, res, next) {
let speedtest = new FastSpeedtest({
token: hidden, // required
verbose: false, // default: false
timeout: 10000, // default: 5000
https: true, // default: true
urlCount: 5, // default: 5
bufferSize: 8, // default: 8
unit: FastSpeedtest.UNITS.Mbps, // default: Bps
proxy: "http://optional:auth@my-proxy:123", // default: undefined
});
speedtest.getSpeed().then((s) => {
fetch(ipApiToken).then(function (response) {
response.json().then((jsonData) => {
res.render("testSpeed", { s, jsonData });
});
});
})
.catch((e) => {
console.error(e.message);
});
}
async function create(req, res, next) {
let userIsp = req.body.isp
let userSpeed = req.body.speed
let userLocation = req.body.location
let newSpeedTest = await importSpeed.speedModel.create({speed: Math.round(userSpeed),location: userLocation, isp: '', isp_id: ''});发布于 2021-01-16 11:10:51
这是不可能的,因为您从服务器发送请求。
如果您想要从一台计算机获取ping /下载速度等数据,您必须从这台计算机发送请求。
发布于 2021-01-16 13:58:27
我从其中提取JSON信息的API (ipapi)可以使用IP地址提取数据。幸运的是,我发现Express在'req‘中有一个内置的功能,可以拉取客户端的IP地址。我仍然有获得准确的速度测试的问题,但这可能会在未来帮助其他人。
var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;这将拉取控制器函数中的客户端IP地址。
我刚把它改成:
speedtest.getSpeed().then((s) => {
fetch('https://ipapi.co/' + ip + '/json/?key=' + ipApiToken).then(function (response) {
response.json().then((jsonData) => {
res.render("testSpeed", { s, jsonData });
});
});
})包含这些更改的完整代码:
function index(req, res, next) {
var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
let speedtest = new FastSpeedtest({
token: 'YXNkZmFzZGxmbnNkYWZoYXNkZmhrYWxm', // required
verbose: false, // default: false
timeout: 10000, // default: 5000
https: true, // default: true
urlCount: 5, // default: 5
bufferSize: 8, // default: 8
unit: FastSpeedtest.UNITS.Mbps, // default: Bps
proxy: "http://optional:auth@my-proxy:123", // default: undefined
});
speedtest.getSpeed().then((s) => {
fetch('https://ipapi.co/' + ip + '/json/?key=' + ipApiToken).then(function (response) {
response.json().then((jsonData) => {
res.render("testSpeed", { s, jsonData });
});
});
})
.catch((e) => {
console.error(e.message);
});
}https://stackoverflow.com/questions/65745709
复制相似问题