遍歷json
var json1={"name":"txt1","name2":"txt2"};
for(var js1 in json1){
console.log( js1+"="+json1[js1]);
}
var jslength=0;
for(var js1 in json1){
jslength++;
}
寫成一個方法
function getJsonLength(jsonData){
var jsonLength = 0;
for(var item in jsonData){
jsonLength++;
}
return jsonLength;
}
formidable 使用方法
formidable = require("formidable"); //載入 formidable
var form = new formidable.IncomingForm();
var post = {},
file1 = {};
form.uploadDir = path.normalize(__dirname+'/../avatar/course');
form
.on('error', function(err) {
console.log(err); //各種錯誤
})
//POST 普通數據 不包含文件 field 表單name value 表單value
.on('field', function(field, value) {
if (form.type == 'multipart') { //有文件上傳時 enctype="multipart/form-data"
if (field in post) { //同名表單 checkbox 返回array 同get處理
if (util.isArray(post[field]) === false) {
post[field] = [post[field]];
}
post[field].push(value);
return;
}
}
post[field] = value;
})
.on('file', function(field, file) { //上傳文件
file1[field] = file;
})
.on('end', function() {
fn(post, file1); //解析完畢 做其他work
});
form.parse(req); //解析request對象
function fn(fields,files){
console.log(fields);
console.log(files);
}
當form 有enctype=“multipart/form-data” 和沒有 enctype=“multipart/form-data” 時 同名表單處理的方式不一樣。
有 enctype=“multipart/form-data” 時 同名表單會被最后一個value覆蓋,
沒有 enctype="multipart/form-data"時,同get一樣 會返回一個array
所以, 在 'field’事件時,對form.type進行不同處理 , 同名表單都返回array
還有一個問題,上傳文件時 如果不選擇文件 也會在臨時目錄生成空的臨時文件, 解決辦法:
修改 formidable 模塊 lib/incoming_form.js handlePart方法 在183行處添加:
if (part.filename == "") {
return;
}
上傳文件返回的結構如下:
{
size: 40635, //文件大小
path: '/tmp/f0423db2bf874499423ce409e2f222f4', //臨時文件路徑
name: 'arrow.png', //文件名稱
type: 'image/png', //文件 mime
lastModifiedDate: Sun, 11 Mar 2012 07:19:44 GMT,
_writeStream:
{ path: '/tmp/f0423db2bf874499423ce409e2f222f4',
fd: 7,
writable: false,
flags: 'w',
encoding: 'binary',
mode: 438,
bytesWritten: 40635,
busy: false,
_queue: [],
drainable: true },
length: [Getter], //同size
filename: [Getter], //同name
mime: [Getter] //同type
}
文件上傳到臨時文件目錄下,我們還要將臨時文件, 移到我們的上傳目錄中
fs.rename(file.path, global.appConfig.uploadDir + '/' + file.filename);