javascript - 如何在 Sails.js 中生成唯一的发票 ID

标签 javascript node.js sails.js

我需要让 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 没有办法解决类似的情况,但我在文档中也找不到任何内容。

最佳答案

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

2.在 Node 下使用crypto生成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

关于javascript - 如何在 Sails.js 中生成唯一的发票 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39074909/

相关文章:

file-upload - 如何在 sails 中指定 Express 的文件上传目录?

javascript - 如何通过保留定义的样式将文本从 Word 粘贴到纯文本?

javascript - axios Get 请求问题

node.js - 如何使用 Node JS 在 Redis 缓存中创建基于标签的搜索?

javascript - 如何在客户端设置 JS Require 工具来 require ('net' )?

sails.js - sails.js 有没有办法在 SQL 查询中选择字段?

javascript - 在父项之前 react 子项呈现

javascript - 为什么 papaparse 会生成不正确的子数组?将数据划分为 [0..99][100] 数组而不是 [0][1]...[100]

javascript - 如何将我的 Ionic 应用程序与我的 java 服务器(Spring MVC)连接?

javascript - 抽象出 html/css 的低级 javascript 框架?