Привет, мне нужно сделать серверный рендеринг для vue.js, при этом нужно выполнять недоверенный код из компонентов .vue
Для того что бы обезопаситься я хочу вынести серверный рендеринг в sandbox
vm2
Вот только ничего не выходит.
Пытаюсь сделать примерно следующее:
const fs = require('fs');
const express = require('express');
const { createBundleRenderer } = require('vue-server-renderer');
const {NodeVM} = require('vm2');
const app = express();
app.get('*', (req, res) => {
let bundleRenderer = createBundleRenderer(
require('./dist/vue-ssr-bundle.json'),
{
template: fs.readFileSync('./public/index.html', 'utf-8')
}
);
const vm = new NodeVM({
sandbox: {
bundleRenderer,
res,
req
},
require: {
external: true,
}
})
vm.run(`
bundleRenderer
.renderToStream({url: req.path})
.pipe(res);
`, 'server.js')
});
app.listen(8090);
Но получаю ошибку:
[Vue warn]: Error in beforeCreate hook: "TypeError: 'defineProperty' on proxy: trap returned truish for adding property 'styles' that is incompatible with the existing property in the proxy target"
Возможно кто нибудь сможет подсказать мне, как правильно сделать подобное?
А может есть какой то другой способ выполнения недоверенного кода на сервере?