Vue服务端渲染(Nodejs)

本文主要介绍了Vue.js的服务端渲染(SSR)技术,包括如何安装vue和vue-server-renderer依赖,以及服务端渲染在获取服务器数据时的应用场景。建议采用MVC架构,每个页面对应一个Controller。关键代码示例展示了如何在 homepage.js 中设置,以及在 home.html 中利用<!–vue-ssr-outlet–>注入应用的HTML。同时,在Router中调用postLoginToHome方法完成路由处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要参考官方文档:
https://ssr.vuejs.org/zh/

安装:
npm install vue vue-server-renderer --save

应用场景:
Node某一路由返回的页面利用vue component和服务端数据进行服务端的页面渲染,(没有进行服务端渲染的原因是数据来源为服务端,其他模板引擎使用res.render()方法实现相同服务端渲染功能)
建议代码结构:MVC中的Controller层,一个页面对应一个controller

关键代码:

homepage.js:

const Vue = require('vue');
const fs = require('fs');
const path = require('path');

const renderer = require('vue-server-renderer').createRenderer({
  template: fs.readFileSync(path.join(__dirname,'../','views','home.html'), 'utf-8')
}); //定义返回的html文件的地址

exports.postLoginToHome = function (req,res,next) {
  const username = req.body.username;
  const subComponent = {
    template: `<span>Hi</span>`
  } //子组件定义
  const homeComponent = new Vue({ //定义根组件 注意:这里不用el定位,而是<!--vue-ssr-outlet--> 
        data: function() {
            return {
              username: username
            }
          },
        template:`
        <div class="homePageWrapper">
          <ul>
            <li id="username">{{username}}</li>
          </ul>
          <sub-component></sub-component>
        </div>
        `,
        components: {
          'sub-component':subComponent //使用多个组件
        }
  });
  user.login(user,
    function(){
      res.redirect("/")
    },
    function(){
      renderer.renderToString(homeComponent, (err, html) => {
        res.send(html); // html 将是注入应用程序内容的完整页面
      })
    });
};

home.html:

  <div id="homeComponent">
    <!--vue-ssr-outlet--> 
  </div>

注意 <!–vue-ssr-outlet–> 注释 – 这里将是应用程序 HTML 标记注入的地方
在Router处理文件里引入postLoginToHome方法即可:
home.js:

const homepageController =require("../controllers/homepage"); //controller homepage.js地址
const router = express.Router();

router.post('/home/:userId', homepageController.postLoginToHome); //应用方法 与特定路由绑定

module.exports = router;
### 集成Node.js与Vue的方法 #### 使用Vue CLI创建项目并配置代理服务器 对于前端部分,可以通过 Vue CLI 创建新的 Vue 应用程序。这一步骤确保了项目的结构化和工具链的支持[^1]。 ```bash npm install -g @vue/cli vue create my-project cd my-project ``` 为了使前后端在同一域名下运行,减少跨域问题,在`vue.config.js`文件中设置代理: ```javascript module.exports = { devServer: { proxy: 'http://localhost:3000' // Node.js 后端服务地址 } } ``` #### 构建完整的应用程序框架 在后端采用 Express 搭配 Node.js 实现 API 接口的服务端逻辑处理。Express 是一个轻量级的 Web 框架,非常适合快速搭建 RESTful APIs[^4]。 ```javascript const express = require('express'); const app = express(); app.use(express.json()); // 定义API路由 app.get('/api/data', (req, res) => { res.json({ message: "Hello from server!" }); }); app.listen(3000, () => console.log('Server running on port 3000')); ``` #### 数据库集成 当涉及到持久化存储时,可以选择 MongoDB 并利用 Mongoose ODM 进行模型定义以及数据库交互操作。Mongoose 提供了一种简单的方式来管理和查询 MongoDB 中的数据集合[^3]。 ```javascript const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/my_database', { useNewUrlParser: true }); const Schema = mongoose.Schema; let ArticleSchema = new Schema({ title: String, content: String }); let ArticleModel = mongoose.model('Article', ArticleSchema); ``` #### 组件间通信 为了让 Vue 前端应用能够调用到这些接口,通常会借助 Axios 或 Fetch API 发送 HTTP 请求获取所需资源。下面是一个简单的例子展示了如何从后端拉取数据并在组件内渲染出来。 ```html <template> <div id="app"> <h1>{{ msg }}</h1> </div> </template> <script> import axios from 'axios'; export default { name: 'App', data() { return { msg: '' }; }, mounted() { this.fetchData(); }, methods: { async fetchData() { try { const response = await axios.get('/api/data'); this.msg = response.data.message; } catch(error){ console.error("Error fetching data:", error); } } } }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值