const app = require('express')() const fs = require('fs') const path = require('path') const bodyParser = require('body-parser') const vueServerRenderer = require('vue-server-renderer') const morgan = require('morgan')
const filePath = path.join(__dirname, './bundle.server.js') const code = fs.readFileSync(filePath, 'utf8') const bundleRenderer = vueServerRenderer.createBundleRenderer(code)
const PORT = process.env.PORT || 5000
app.use(bodyParser.text()) app.use(morgan('tiny'))
const render = html => new Promise((resolve, reject) => {
bundleRenderer.renderToString({ body: html }, (err, res) => { if (err) return reject(err) return resolve(res) })
})
app.post('*', (req, res) => {
if (typeof req.body !== 'string' || req.body.length === 0) return res.status(400).send('') return render(req.body) .catch((err) => { console.error(err) res.status(500).send(JSON.stringify(err)) }) .then(html => res.send(html))
})
app.listen(PORT, () => console.log('listening on', PORT))