Vue+;Express(NestJS)不可能完成的任务,您使用的是仅运行时构建的Vue,其中
这使得我无法将Vue作为视图系统添加到名为Nest with Express的框架中 我没想到适应Vue这么复杂。这就是我在这里的原因,这样您就可以引导我走上正确的道路,而我不会直接使用Vue 首先是错误:Vue+;Express(NestJS)不可能完成的任务,您使用的是仅运行时构建的Vue,其中,express,vue.js,vuejs2,nestjs,server-side-rendering,Express,Vue.js,Vuejs2,Nestjs,Server Side Rendering,这使得我无法将Vue作为视图系统添加到名为Nest with Express的框架中 我没想到适应Vue这么复杂。这就是我在这里的原因,这样您就可以引导我走上正确的道路,而我不会直接使用Vue 首先是错误: [Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into re
[Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.
(found in <Root>)
从“/app”导入{createApp}
import Vue from 'vue';
export function createApp(context: any) {
return new Vue({
data: context.data,
template: fs.readFileSync('./index.html', 'utf-8'),
components: context.components,
}).$mount('#app');
}
我尝试创建一个基本模板,然后使用NestJS为每个控制器或路由添加组件
我不知道这是否可行,也不知道我是否被迫使用Webpack,因为我目前没有使用它
谢谢 谢天谢地,这不是一个复杂的问题 您正在尝试使用基于
.ts
文件的运行时
构建,但无法使用。这是因为只有*.vue
是预编译的
要解决此问题,只需在webpack中为vue创建一个别名:
resolve: {
alias: {
vue: 'vue/dist/vue.js'
}
}
这将允许您访问模板编译器,允许您在未预编译的模板(读取:任何不以.Vue结尾的文件)中使用
Vue
。Vue启动了整个站点,引导您完成服务器端渲染的启动和运行。这与在中概述的过程不同
完整的信息可以在以下位置找到:并在主指南中的标题“服务器端渲染”下的侧栏导航的一半处引用
以下是让您开始学习的要点:
npm install express --save
npm install vue vue-server-renderer --save
与服务器示例集成
const Vue = require('vue')
const server = require('express')()
const renderer = require('vue-server-renderer').createRenderer()
server.get('*', (req, res) => {
const app = new Vue({
data: {
url: req.url
},
template: `<div>The visited URL is: {{ url }}</div>`
})
renderer.renderToString(app, (err, html) => {
if (err) {
res.status(500).end('Internal Server Error')
return
}
res.end(`
<!DOCTYPE html>
<html lang="en">
<head><title>Hello</title></head>
<body>${html}</body>
</html>
`)
})
})
server.listen(8080)
const Vue=require('Vue')
const server=require('express')()
const renderer=require('vue-server-renderer')。createRenderer()
server.get('*',(req,res)=>{
const app=新的Vue({
数据:{
url:req.url
},
模板:`访问的URL是:{{URL}}`
})
renderer.renderToString(应用程序,(错误,html)=>{
如果(错误){
res.status(500).end('内部服务器错误')
返回
}
res.end(`
你好
${html}
`)
})
})
服务器监听(8080)
呈现Vue实例
// Step 1: Create a Vue instance
const Vue = require('vue')
const app = new Vue({
template: `<div>Hello World</div>`
})
// Step 2: Create a renderer
const renderer = require('vue-server-renderer').createRenderer()
// Step 3: Render the Vue instance to HTML
renderer.renderToString(app, (err, html) => {
if (err) throw err
console.log(html)
// => <div data-server-rendered="true">Hello World</div>
})
// in 2.5.0+, returns a Promise if no callback is passed:
renderer.renderToString(app).then(html => {
console.log(html)
}).catch(err => {
console.error(err)
})
//步骤1:创建Vue实例
常量Vue=require('Vue')
const app=新的Vue({
模板:`你好,世界`
})
//步骤2:创建渲染器
const renderer=require('vue-server-renderer')。createRenderer()
//步骤3:将Vue实例呈现为HTML
renderer.renderToString(应用程序,(错误,html)=>{
如果(错误)抛出错误
console.log(html)
//=>你好,世界
})
//在2.5.0+中,如果未传递回调,则返回承诺:
renderer.renderToString(app).then(html=>{
console.log(html)
}).catch(错误=>{
控制台错误(err)
})
我认为将VUE直接添加到html中可能更好,但我可能会遇到与Express framework相同的问题。谢谢,但我已经遵循了这一点,我遇到的问题是我不能使用任何模板库,然后在controller中只注入组件。这不在文档中,我在谷歌上找不到任何东西。我不敢相信我终于做到了。谢谢,谢谢
// Step 1: Create a Vue instance
const Vue = require('vue')
const app = new Vue({
template: `<div>Hello World</div>`
})
// Step 2: Create a renderer
const renderer = require('vue-server-renderer').createRenderer()
// Step 3: Render the Vue instance to HTML
renderer.renderToString(app, (err, html) => {
if (err) throw err
console.log(html)
// => <div data-server-rendered="true">Hello World</div>
})
// in 2.5.0+, returns a Promise if no callback is passed:
renderer.renderToString(app).then(html => {
console.log(html)
}).catch(err => {
console.error(err)
})