2016-08-22 61 views
0

一個唯一的發票編號我需要帆爲我的發票與當前格式的唯一ID:如何產生Sails.js

<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的項目已經創建。

我不敢相信,風帆沒有東西來解決類似的情況,但我無法找到文檔中的任何東西。

回答

1

1.You需要檢查,如果此生成的ID存在

2.To生成下節點使用加密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

+0

從技術上說,身份證必須是連續的,但我得到你的方法 – Motocarota