Nest.js
是一个渐进的Node.js
框架,可以在TypeScript
和JavaScript
(ES6、ES7、ES8)之上构建高效、可伸缩的企业级服务器端应用程序。它的核心思想是提供了一个层与层直接的耦合度极小、抽象化极高的一个架构体系。
本文记录遇到的开发问题和解决方式
一、上传文件中文乱码
在服务端接收到上传文件的数据时,如果originalname
包含中文或其它非英文
的字符,会导致文件名乱码,解决方法如下:
// 假设我们接收到的是单文件为 file; 多文件遍历就可以了。
const file.originalname = Buffer.from(file.originalname,'latin1').toString('utf-8');
// 此时文件名就可以正确显示了
二、前端连接websocket
网关时,无法连接
在nestjs
中创建的WebSocketGateway
链接,当本地测试时,会出现GET http://localhost:xxxx/socket.io/?EIO&transport=polling net::ERR CONNECTION_REFUSED&
类似的问题,原因是连接websocket
时,**必须写服务器的真实IP 地址
**,不能使用localhost
的方式进行测试,重要。
三、nestjs 使用session时,无法获取session值
记录在
nestjs
中使用express-session
的正确方式。
- 服务端(直接看代码)
- 安装包
yarn add express-session yarn add -D @types/express-session
- 在
main.ts
中加入一下代码// 其它代码... // 注意:如果你的开发涉及跨域,跨域的配置必须写在 session 配置的前面。 // credentials:true, 这在同域几乎没用,但是在跨域的时候,它可以允许跨域请求携带cookie, // 设置了上面的属性,则 origin 不能是 * ,必须是完整的地址 app.enableCors({credentials:true,origin:'http://localhost:3001'}); // 跨域配置 app.use(session({ // session 配置,从 express-session 导入,具体配置参数详情可自行前往官网学习 secret:'my-secret', cookie: { maxAge: 60000, httpOnly:true, }, resave: false, saveUninitialized: false, name: "my-session", rolling:true, }))
- 在
user.controller.ts
中使用。// 导入必须的库 ('user') export class UserController{ ('authcode') async getCode(){ req. () req, () ressession.code = "1234"; // 此处在请求中设置了 session return "get code success"; } ('login') login(){ () body, () reqconst {code} = body; console.log(req.session.code); if (code?.toUpperCase() === req.session.code?.toUpperCase()) { console.log('验证码通过'); return 'hello authocode'; } else { console.log('验证码未通过'); return 'code error'; } } }
- 安装包
- 客户端
import axios from "axios"; axios.defaults.withCredentials = true; // 配置此项即可,就可以正确使用了