node.js之express中的"坑"总结及解决方法汇总

一、如何获取复选框中的值?

可能是因为常年写PHP的缘故,一想到获取复选框的值时,就认为,把相同name的复选框命名为name[](如爱好hobby[])

例如:

  1. <input type="checkbox" name="hobby[]" value="1"> 撸代码
  2. <input type="checkbox" name="hobby[]" value="2"> 运动
  3. <input type="checkbox" name="hobby[]" value="3"> 看美女

而在express中你通过:req.param.hobby是获取不到的

你复选框的名称必须是一个字符串,不能是一个数组

  1. <input type="checkbox" name="hobby" value="1"> 撸代码
  2. <input type="checkbox" name="hobby" value="2"> 运动
  3. <input type="checkbox" name="hobby" value="3"> 看美女

这样就能获取了

二、在使用express-session模块时获取不到session设置的值?

一般按照express-session的说明,一般就这样使用:(在启动文件中,一般是app.js)

这几个参数必填,不然会报警告,发现设置了session,但是获取不了

  1. app.use(session({secret:'shixinke', resave:true, saveUninitialized:false}))

原来它有一个cookie的属性,cookie属性有一个默认的secure的属性,默认值为undefined,这个值是什么意思呢?

每个cookie是否是TLS/SSL这种安全连接(一般用于HTTPS),因此,我们一般的http协议设置为false,即:

  1. app.use(session({secret:'shixinke', resave:true, saveUninitialized:false,cookie:{secure:false}}))

三、使用multer上传文件时,无法获取其他post的值?

如果你的表单有上传文件域,即表单的enctype为mulipart/form-data,那么你不能使用req.param这种方式来获取提交的参数

要在解析表单的方法回调函数中获取表单提交的参数(fields)

应该使用如下:

  1. function uploadFile(req, res) {
  2. var form = new formidable.IncomingForm(); //创建上传表单
  3. form.encoding = 'utf-8'; //设置编辑
  4. form.uploadDir = 'public/uploads/images' ; //设置上传目录
  5. form.keepExtensions = true; //保留后缀
  6. form.maxFieldsSize = 2 * 1024 * 1024 : 20 * 1024 *1024; //文件大小
  7. form.parse(req, function(err, fields, files) {
  8. //这里的fields这个参数就是提交的参数对象
  9. });
  10. }