gpt4 book ai didi

node.js - 我应该如何在 Mongoose 中存储价格?

转载 作者:IT老高 更新时间:2023-10-28 22:07:56 25 4
gpt4 key购买 nike

我正在为 node.js 使用 Mongoose 模式以及 express-validator(它具有 node-validator santiziations 和验证器)。

存储商品价格的好方法是什么?

我现在有

var ItemSchema = new Schema({
name : { type: String, required: true, trim: true }
, price : Number
});

价格是可选的,所以我有:

  if ( req.body.price ) {
req.sanitize('price').toFloat();
req.assert('price', 'Enter a price (number only)').isFloat();
}

express-validator 给了我 isNumeric(允许 0 填充)、isDecimal 和 isInt...我宁愿只转换为十进制并删除所有字符,所以我总是将 42.00 插入 db。

我想让他们输入 $42.00、$42、42、42.00 并仅存储 42.00。我怎样才能做到这一点?并且仍然验证我看到类似于数字的东西,例如,如果他们输入“abc”,我想使用 req.assert 将错误返回到表单。

另外,我认为货币最终会成为一个问题......

更新,我发现这篇文章说将价格存储为以美分为单位的整数,所以 4200 https://dba.stackexchange.com/questions/15729/storing-prices-in-sqlite-what-data-type-to-use

当我调用 item.price 并清理输入并将其转换为 4200 时,我只需要一种将 4200 转换为 $42.00 的方法。

最佳答案

这就是我最终做的......

我将价格以美分形式存储在数据库中,因此 49.99 的价格为 4999,如下所述:https://dba.stackexchange.com/questions/15729/storing-prices-in-sqlite-what-data-type-to-use

getPrice 会将其转换回可读格式,因此我可以在 View 中使用 item.price 而无需修改它。

setPrice 将其转换为美分。

型号:

var ItemSchema = new Schema({
name : { type: String, required: true, trim: true }
, price : {type: Number, get: getPrice, set: setPrice }
});

function getPrice(num){
return (num/100).toFixed(2);
}

function setPrice(num){
return num*100;
}

我选择在价格字段中只允许数字和小数,不包括 $。所以他们可以输入 49、49.99、49.00,但不能输入 49.0 或 49 美元

使用正则表达式验证:

if ( req.body.price ) {
req.assert('price', 'Enter a price (numbers only)').regex(/^\d+(\.\d{2})?$/);
}

我希望有一种方法允许使用 $,因为我认为这是一个可用性问题,只需让用户输入它,但将其去掉。我不知道该怎么做,但仍然可以验证我们有一个价格,而不是一堆字母。

关于node.js - 我应该如何在 Mongoose 中存储价格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13304129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com