Nestjs RESTful API与前端Vue.js集成教程
我在学习Nestjs和Vue.js的集成过程中遇到了一些问题,想请教大家:
-
目前按照网上的教程搭建了Nestjs的RESTful API后端,但在前端Vue.js中调用接口时总是出现跨域问题,该如何正确配置CORS?
-
在Vue.js项目中应该用axios还是fetch来与Nestjs API交互更合适?两种方式与Nestjs配合使用时有什么特别的注意事项吗?
-
我看到有些教程在Nestjs中使用class-validator进行数据验证,而Vue.js前端也需要做表单验证,这两边的验证逻辑是否有必要保持一致?如何优雅地处理这种重复验证?
-
对于JWT认证的实现,Nestjs后端生成token后,Vue.js前端应该如何安全地存储和使用?特别是在axios拦截器中该如何正确处理token过期的情况?
希望有实际项目经验的朋友能分享一下最佳实践,谢谢!
以下为基本步骤:
-
后端(NestJS)准备
- 初始化项目:
npm i -g @nestjs/cli
,然后nest new backend
- 创建模块、控制器和服务,例如:
nest g resource user
- 编写REST接口,如
GET /users
返回用户列表。确保支持跨域(CORS),可在main.ts启用app.enableCors()
。
- 初始化项目:
-
数据模型设计
- 使用TypeORM或Mongoose操作数据库,定义实体类。
- 配置数据库连接(如MySQL、MongoDB)。
-
接口测试
- 使用Postman或curl测试后端API是否正常。
-
前端(Vue.js)准备
vue create frontend
创建Vue项目。- 安装Axios进行HTTP请求:
npm install axios
-
Vue集成后端
- 在Vue组件中引入axios,编写方法调用后端接口,如:
methods: { async fetchUsers() { const response = await axios.get('http://localhost:3000/users'); this.users = response.data; } }
- 显示数据:使用
v-for
渲染到页面。
- 在Vue组件中引入axios,编写方法调用后端接口,如:
-
部署与联调
- 确保前后端分离部署或同源运行。
- 处理跨域问题(可使用NestJS代理或前端代理)。
完成以上步骤即可实现简单的NestJS与Vue.js集成。
要将NestJS的RESTful API与Vue.js集成,首先确保两者运行在同一域名下或配置CORS。以下是步骤:
-
创建NestJS项目:使用
npm i -g [@nestjs](/user/nestjs)/cli
初始化项目,并定义Controller(如@Get('users') getUsers()
)和Service。 -
启动NestJS服务:运行
npm run start:dev
,确保API接口可用。 -
创建Vue.js项目:全局安装Vue CLI (
npm install -g @vue/cli
),然后创建新项目(vue create frontend
)。 -
安装Axios:在Vue项目中安装Axios (
npm install axios
)用于发送HTTP请求。 -
编写Vue组件:在Vue组件中使用Axios调用NestJS API,例如:
<script> import axios from 'axios'; export default { data() { return { users: [] }; }, created() { axios.get('http://localhost:3000/users') .then(response => this.users = response.data) .catch(error => console.error(error)); } }; </script>
-
配置跨域:在NestJS的
main.ts
中启用CORS:import { NestFactory } from '[@nestjs](/user/nestjs)/core'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.enableCors(); await app.listen(3000); } bootstrap();
-
运行并测试:分别启动NestJS和Vue.js服务,访问Vue页面查看数据是否正常显示。
这样就完成了基本的前后端集成。记得处理错误、加载状态等用户体验细节。
NestJS与Vue.js集成教程
后端(NestJS)设置
- 首先创建一个NestJS RESTful API服务:
// main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
// 启用CORS以便前端访问
app.enableCors({
origin: 'http://localhost:8080', // Vue开发服务器地址
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
credentials: true,
});
await app.listen(3000);
}
bootstrap();
- 创建示例控制器:
// cats.controller.ts
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll() {
return [{ id: 1, name: 'Whiskers' }, { id: 2, name: 'Mittens' }];
}
}
前端(Vue.js)设置
- 在Vue项目中安装axios:
npm install axios
- 创建API服务文件:
// src/services/api.js
import axios from 'axios';
const api = axios.create({
baseURL: 'http://localhost:3000',
withCredentials: true,
});
export default {
getCats() {
return api.get('/cats');
}
}
- 在Vue组件中使用:
<template>
<div>
<h1>Cats</h1>
<ul>
<li v-for="cat in cats" :key="cat.id">{{ cat.name }}</li>
</ul>
</div>
</template>
<script>
import api from '@/services/api';
export default {
data() {
return {
cats: []
}
},
async created() {
try {
const response = await api.getCats();
this.cats = response.data;
} catch (error) {
console.error('Error fetching cats:', error);
}
}
}
</script>
注意事项
- 确保后端和前端运行在不同的端口上(如NestJS:3000,Vue:8080)
- 开发环境下启用CORS,生产环境应配置更严格的安全策略
- 可以考虑使用环境变量管理API base URL
这种集成方式允许Vue前端通过RESTful API与NestJS后端通信,实现数据交互。