photoeditorsdk-server
Version:
The most comprehensive photo editor SDK for Server Applications based on NodeJs
88 lines (73 loc) • 2.25 kB
JavaScript
const express = require('express')
const bodyParser = require('body-parser')
const Utils = require('./utils')
const fs = require('fs')
const Canvas = require('canvas')
const PhotoEditorServer = require('photoeditorsdk-server')
Utils.invariant(express, 'Module express not installed!')
Utils.invariant(bodyParser, 'Module bodyParser not installed!')
Utils.invariant(Canvas, 'Module Canvas not installed!')
Utils.invariant(PhotoEditorServer, 'Module PhotoEditorServer not installed')
const argv = require('minimist')(process.argv.slice(2))
let { l: licenseFile, p: port, h: help } = argv
function printHelp () {
console.log('Possible parameters are')
console.log('-l\tLicense file')
console.log('-p\tPort')
}
if (help) {
printHelp()
process.exit(0)
}
port = Utils.defaults(port, 3000)
try {
Utils.invariant(licenseFile, 'No license file given!')
} catch (error) {
console.log(error.message)
printHelp()
process.exit(1)
}
console.log('Reading license file...')
const license = fs.readFileSync(licenseFile).toString()
Utils.invariant(license.length > 0, 'No license file content!')
const mimeType = 'image/jpeg'
const pesdkConfig = {
license: license,
transparent: true,
editor: {
preferredRenderer: 'webgl',
export: {
format: mimeType,
type: PhotoEditorServer.SDK.RenderType.BUFFER
}
},
assets: {
baseUrl: '../node_modules/photoeditorsdk-server/assets'
}
}
const pesdkServer = new PhotoEditorServer(pesdkConfig)
const renderFromPostRequest = (req, res) => {
const {body: serialization} = req
Utils.invariant(serialization, 'Request body does not include serialization')
pesdkServer.render(serialization)
.then((outputImage) => {
res.contentType(mimeType)
res.end(outputImage, 'binary')
})
.catch((error) => {
res.status = 500
res.statusText = error.message
res.end()
})
}
const routeNotfound = (req, res) => {
res.status = 404
res.statusText = `Route ${req.path} not found`
res.end()
}
const app = express()
app.use(bodyParser.json({limit: '1000mb'}))
app.post('/render', renderFromPostRequest)
app.get('*', routeNotfound)
app.post('*', routeNotfound)
app.listen(port, () => console.log(`Listening on port ${port}!`))