首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有MongoDB的Express应用程序在客户端浏览器而不是服务器上执行“创建”功能

使用带有MongoDB的Express应用程序在客户端浏览器而不是服务器上执行“创建”功能
EN

Stack Overflow用户
提问于 2021-01-16 09:43:00
回答 2查看 24关注 0票数 0

我创建了一个使用客户端速度、位置和ISP的互联网速度测试应用程序。问题是,当执行此代码时,它会获取数据中心所在位置的速度、ISP和位置(在我的示例中是通过Heroku在弗吉尼亚州的AWS服务器)。我的想法是,我需要这段代码在客户端的浏览器端而不是在服务器端执行。是否可以使用Express、Mongoose和EJS?

相关代码发布在下面。这是来自我的控制器的。我没有包括其余部分,因为它只是一些单独的/呈现代码的逻辑。

代码语言:javascript
复制
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: ''});
EN

回答 2

Stack Overflow用户

发布于 2021-01-16 11:10:51

这是不可能的,因为您从服务器发送请求。

如果您想要从一台计算机获取ping /下载速度等数据,您必须从这台计算机发送请求。

票数 0
EN

Stack Overflow用户

发布于 2021-01-16 13:58:27

我从其中提取JSON信息的API (ipapi)可以使用IP地址提取数据。幸运的是,我发现Express在'req‘中有一个内置的功能,可以拉取客户端的IP地址。我仍然有获得准确的速度测试的问题,但这可能会在未来帮助其他人。

代码语言:javascript
复制
var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;

这将拉取控制器函数中的客户端IP地址。

我刚把它改成:

代码语言:javascript
复制
  speedtest.getSpeed().then((s) => {
  fetch('https://ipapi.co/' + ip + '/json/?key=' + ipApiToken).then(function (response) {
    response.json().then((jsonData) => {
      res.render("testSpeed", { s, jsonData });
    });
  });
})

包含这些更改的完整代码:

代码语言:javascript
复制
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);
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65745709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档