Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于货币获取记录_Javascript_Node.js_Express_Mongoose - Fatal编程技术网

Javascript 基于货币获取记录

Javascript 基于货币获取记录,javascript,node.js,express,mongoose,Javascript,Node.js,Express,Mongoose,我有一张票表,每张票都有价格。我在数据库中设置的基数为美元,假设有人想从美国以外的国家购买机票,我想用当地货币向用户显示价格。适当的做法是什么。首先,我认为我可以在运行时将门票价格转换为当地货币,但由于门票数量庞大,此操作成本高昂 对于我使用的货币转换,我需要根据通过req.query提供的货币提供价格 我无法在此处显示实际代码,但我有一个示例: const express = require('express'); const Product = require('../models/Prod

我有一张票表,每张票都有价格。我在数据库中设置的基数为美元,假设有人想从美国以外的国家购买机票,我想用当地货币向用户显示价格。适当的做法是什么。首先,我认为我可以在运行时将门票价格转换为当地货币,但由于门票数量庞大,此操作成本高昂

对于我使用的货币转换,我需要根据通过
req.query
提供的货币提供价格

我无法在此处显示实际代码,但我有一个示例:

const express = require('express');
const Product = require('../models/Product');
const { fetchRates } = require('../services/fx_rates')

const router = new express.Router();

router.post('/products', async (req, res) => {

    const product = new Product({
        ...req.body
    });

    try {
        await product.save();
        res.status(201).send(product);
    } catch (e) {
        res.send(400).send(e);
    }
});

router.get('/products', async (req, res) => {
    try {
        const products = await Product.find()
        // if (req.query.to) {
        //     for (let product of products) {
        //         fetchRates(product.price, 'USD', to)
        //             .then(price => {
        //                 product.price = price
        //             })
        //             .catch(e => console.log(e))

        //     }
        // }
        console.log(products)
        res.status(200).send({ products: products })
    } catch (e) {
        res.status(500).send();
    }
});

module.exports = router

您可以使用nodejs货币转换器npm。

一种方法是获取所需本地货币的美元兑换率,然后使用代码而不是API转换价格。你可以用这个。 这里有一个例子

const rp = require('request-promise');

async function getConversionRate(localCurrency, base = 'USD'){
  const options = {
    uri: 'https://openexchangerates.org/api/latest.json',
    qs: {
      app_id: 'YOUR_APP_ID',
      base: base,
      symbols: localCurrency,
    },
    json: true
  };
  const result = await rp(options);
  /*
  {
    disclaimer: "https://openexchangerates.org/terms/",
    license: "https://openexchangerates.org/license/",
    timestamp: 1449877801,
    base: "USD",
    rates: {
        INR: 71.43
    }
  }
  */
  return result.rates[localCurrency];
}

router.get('/products', async (req, res) => {
    try {
        const [products, conversionRate] = await Promise.all([Product.find(), getConversionRate(req.query.to)])
        const convertedProducts = products.map(p => {
          p.price = p.price * conversionRate;
          return p;
        });
        console.log(convertedProducts)
        res.status(200).send({ products: convertedProducts })
    } catch (e) {
        res.status(500).send();
    }
});

module.exports = router;

请向我们展示您迄今为止所做的尝试?@AndrewL64请检查更新问题您在发送数据之前是否尝试过测试服务器端转换?您可以在服务器中使用axios/fetch,使用方式与在客户端使用axios/fetch完全相同@MattiaRasulo我有一个类似的想法,但后来我想这在性能方面不是很昂贵吗?我已经决定只发送当前的转换率,客户将进行计算,以显示相关货币的价格。当然,我也会这样做,但在问题中,您希望避免这种情况,因此我提出了一种不同的方法!货币转换不是问题,我想用当地货币向用户展示产品。当它们是多个记录时,操作会变得很耗时。然后你可以使用客户端。我有一个这样的想法,但操作在性能方面很昂贵,因此,我将只发送转换率,客户将相应地转换价格。您能否详细说明平均每个请求获取的产品数量?