parent
3dc23fd746
commit
97d8d34e12
5 changed files with 93 additions and 27 deletions
Binary file not shown.
@ -0,0 +1,67 @@ |
|||||||
|
const PizZip = require('pizzip'); |
||||||
|
const Docxtemplater = require('docxtemplater'); |
||||||
|
const fs = require('fs'); |
||||||
|
const path = require('path'); |
||||||
|
|
||||||
|
// The error object contains additional information when logged with JSON.stringify (it contains a properties object containing all suberrors).
|
||||||
|
function replaceErrors(key, value) { |
||||||
|
if (value instanceof Error) { |
||||||
|
return Object.getOwnPropertyNames(value).reduce(function (error, key) { |
||||||
|
error[key] = value[key]; |
||||||
|
return error; |
||||||
|
}, {}); |
||||||
|
} |
||||||
|
return value; |
||||||
|
} |
||||||
|
|
||||||
|
function errorHandler(error) { |
||||||
|
console.log(JSON.stringify({ |
||||||
|
error: error |
||||||
|
}, replaceErrors)); |
||||||
|
|
||||||
|
if (error.properties && error.properties.errors instanceof Array) { |
||||||
|
const errorMessages = error.properties.errors.map(function (error) { |
||||||
|
return error.properties.explanation; |
||||||
|
}).join("\n"); |
||||||
|
console.log('errorMessages', errorMessages); |
||||||
|
// errorMessages is a humanly readable message looking like this :
|
||||||
|
// 'The tag beginning with "foobar" is unopened'
|
||||||
|
} |
||||||
|
throw error; |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = function (userInfo, fileName) { |
||||||
|
return new Promise((resolve, reject) => { |
||||||
|
let content = fs.readFileSync(path.resolve(__dirname, `../template/${fileName}`), 'binary'); |
||||||
|
let zip = new PizZip(content); |
||||||
|
let doc; |
||||||
|
|
||||||
|
try { |
||||||
|
doc = new Docxtemplater(zip); |
||||||
|
} catch (error) { |
||||||
|
errorHandler(error); |
||||||
|
} |
||||||
|
|
||||||
|
doc.setData(userInfo); |
||||||
|
|
||||||
|
try { |
||||||
|
doc.render() |
||||||
|
} catch (error) { |
||||||
|
errorHandler(error); |
||||||
|
} |
||||||
|
|
||||||
|
let buf = doc.getZip().generate({ |
||||||
|
type: 'nodebuffer' |
||||||
|
}); |
||||||
|
fs.writeFileSync(path.resolve(__dirname, `../public/files/${userInfo.firstName}-${userInfo.lastName}-${fileName}`), buf); |
||||||
|
resolve(`http://localhost:3000/users/download/${userInfo.firstName}-${userInfo.lastName}-${fileName}`) |
||||||
|
|
||||||
|
.catch(err => { |
||||||
|
reject({ |
||||||
|
eCode: 500, |
||||||
|
eText: err |
||||||
|
}) |
||||||
|
}) |
||||||
|
}) |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue