[Node + TypeScript + sequelize + jwt] 踩坑纪录

阎阳
2023-12-01

sequelize操作数据库踩坑

索引BUG

当你的属性unique: true时,.sync({alter: true})会在每次执行的时候新增索引,建议数据库的属性不变时不使用alter:true

username: {
	type: DataTypes.STRING,
	unique: true, // 当你的属性`unique: true`时,`.sync({alter: true})`会在每次执行的时候新增索引
	allowNull: false,
}
// `.sync({alter: true})`会在每次执行的时候新增索引
await User.sync({alter: true});

上传、预览文件踩坑

上传文件踩坑

上传带中文名的文件时,文件名乱码,使用Buffer.from转义utf8

const storage = multer.diskStorage({
    // 文件上传的地址
    destination: (req, file, callback) => {
        // ...
        callback(null, dir);
    },
    // 文件名称
    filename: (req, file, callback) => {
	    // 使用Buffer.from编码
        file.originalname = Buffer.from(file.originalname, 'latin1').toString('utf8');
        callback(null, file.originalname);
    },
});

预览文件踩坑

由于项目使用Nginx代理了,导致Node配置了静态资源托管也无法查看图片,所以Nginx代理也要配置

// Node
// 头像文件静态资源托管
this.app.use('/data/avatar', express.static('/data/avatar'));
# nginx.config
#头像文件代理
location /data/avatar {  
	expires 24h; 
	root /data/avatar/;#指定图片存放路径  
	proxy_store on;  
	proxy_store_access user:rw group:rw all:rw;  
	proxy_temp_path         /data/avatar/;#代理临时路径
	proxy_redirect          off;  
	
	proxy_set_header        Host 127.0.0.1;  
	proxy_set_header        X-Real-IP $remote_addr;  
	proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;  
	client_max_body_size    10m;  
	client_body_buffer_size 1280k;  
	proxy_connect_timeout   900;  
	proxy_send_timeout      900;  
	proxy_read_timeout      900;  
	proxy_buffer_size       40k;  
	proxy_buffers           40 320k;  
	proxy_busy_buffers_size 640k;  
	proxy_temp_file_write_size 640k;  
	if (!-e $request_filename) {  
		proxy_pass  http://127.0.0.1:3001;#代理访问地址  
	}
 类似资料: