标签 nodejs 下的文章

应该有挺多人遇到了这一问题,就是formidableparse无论如何也不执行,找了很多原因,尝试了很多方法,都不管用。

const formidable = require('formidable');

const form = new formidable({
    multiples: true,
    uploadDir: path.join(__dirname, '../ ', '../', '../', 'public', 'uploads'),
    keepExtensions: true
});

form.parse(req, (err, fields, files) => {
    console.log(0); // 不执行
})

我也遇到了这种情况。在parse上选择转到定义,在formidable - parse的源码中添加console,可以看到实际上parse是执行了的,但是浏览器一直在转圈,node端也没有反应,说明这时node不知道怎么处理这个请求,一直处在等待状态。

既然不是formidable的问题,那肯定是请求有问题。
这是一个POST请求,请求由submitbutton触发,由HTML的form发出。
既然是由form发出的请求,那我们来检查一下form的配置是否正确。form如下:

<form method="POST" action="user/add">
  <file/>
</form>

问题就在这里了。这里的form好像缺少一个常用的属性:enctype。这个属性有3个取值,其中有一个值是multipart/form-data,它的描述是:不对字符编码。当使用有文件上传控件的表单时,该值是必需的,而我们的form里面恰恰有一个file
所以,给form加上这个属性试试:

<form method="POST" action="user/add" enctype="multipart/form-data">
......

问题解决了。

End

1、前言

JWT是JSON Web Token的简写,是一种可跨域的身份认证方案。

JWT可以让服务器不再维护session等用户状态,只要token有效,就认为是合法的用户。
但是这样也有一个缺点,就是除非token到期,否则服务器没法主动让token失效。
要解决这个问题,可以把每个用户的token保存在redis数据库,每次在token验证为有效后,还要在redis中查询此token是否存在。这样,既能保证这个查询的速度(redis是内存数据库),也能通过操作redis中的数据,让某些token失效。



- 阅读剩余部分 -