【问题标题】:How to generate a unique invoice id in Sails.js如何在 Sails.js 中生成唯一的发票 ID
【发布时间】:2016-08-22 08:43:26
【问题描述】:

我需要让 Sails 使用当前格式为我的发票生成一个唯一 ID:

 <auto-incremented-number>/<current-year>

点赞:8/2016122/2099122/2100

我们的想法是按照文档中的示例进行操作

 function getLatestId() {
   //stuck here
   return 42;
 }

 const current_year = new Date().getFullYear()
 const calculated_id = getLatestId() +"/"+ current_year

 Invoice.create({ data:'...', id: calculated_id }).exec(function (err, item){
   if (err) { return res.serverError(err); }

   sails.log('Invoice created:', item.id);
   return res.ok();
 });

问题是,即使有一个有效的getLatestId 函数,代码也很丑陋,而且它的代码闻起来很臭。

即使尝试在 create 函数的 exec 回调中更新 id 看起来也很奇怪,因为已经创建了具有特定 id 的项目。

我不敢相信sails 没有解决类似情况的方法,但我在文档中也找不到任何内容。

【问题讨论】:

    标签: javascript node.js sails.js


    【解决方案1】:

    1.你需要检查这个生成的ID是否存在

    2.在node下使用crypt生成uID

    const crypto = require('crypto');
    const uID = crypto.randomBytes(2).toString('hex');
    

    例子:

    'use strict';
    const crypto = require('crypto');
    
    function generateID(callback) {
      let uID = crypto.randomBytes(2).toString('hex'); //eg.uID = 3d4f
      let current_year = new Date().getFullYear();
      let uID = uID +"/"+ current_year;
    
      Invoice.findOne({id: uID}).exec(function(err, invoice) {
        if(err) {
          //catch Error
        } else {
          if(invoice) {
            // nope... uID exist
            return generateID(callback);
          } else {
            return callback(uID)
          }
        }
      });
    }
    
    generateID(function (uID) {
      Invoice.create({ data:'...', id: uID }).exec(function (err, item) {
        if (err) {
          // return res.serverError(err);  <-- It's bad idea sending whole err to client. It's may expose your app architecture
          sails.log.error(err);
          return res.serverError({errCode: 001, message: '<Your custom message>'});
        } else {
          sails.log('Invoice created:', item.id);
          // return res.ok(); <-- It's OK, but if u use new version of sailsJS you should have created response (201). You can see code in responses/created.js
          return res.created();
        }
    
      });
    });
    

    这里有一些其他的随机生成方法:https://blog.tompawlak.org/generate-random-values-nodejs-javascript

    【讨论】:

    • 从技术上讲,ID 必须是连续的,但我明白你的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 2018-05-04
    • 2023-03-15
    • 2010-11-30
    • 2013-03-11
    • 2019-04-29
    • 2018-10-20
    相关资源
    最近更新 更多