我正在尝试使用 V8Js 在 Laravel 中使用 VueJS 和 VueRouter 实现 SSR,但我一直遇到这个错误:
V8JsScriptException
V8Js::compileString():1812: ReferenceError: document is not defined
import App from './app'
import Vue from "vue";
import router from "./router";
let app = new Vue(App);
Vue.config.productionTip = false;
// @ts-ignore
export default new Promise((resolve, reject) => {
// @ts-ignore
router.push(url);
router.onReady(() => {
const matchedComponents = router.getMatchedComponents();
if (!matchedComponents.length) {
return reject({
code: 404
});
}
resolve(app);
}, reject);
}).then(app => {
// @ts-ignore
renderVueComponentToString(app, (err, res) => {
// @ts-ignore
print(res);
});
}).catch((err) => {
// @ts-ignore
print(err);
});
...
$js =
<<<EOT
var process = { env: { VUE_ENV: "server", NODE_ENV: "production" } };
this.global = { process: process };
var url = "$path";
EOT;
$v8 = new \V8Js();
$v8->executeString($js);
$v8->executeString($renderer_source);
$v8->executeString($app_source);
$markup = ob_get_clean();
return $markup;
...
我知道,在 SSR 中没有窗口或文档,但我不知道我的错误在哪里。如果还需要详细信息我可以提供,谢谢。