//Buffer 的split方法
let buffer = new Buffer('abc\r\nddasdfafd\r\ndfaerewtwert');
function bufferSplit(buffer, delimiter){
let res = [];
let n = 0;
while((n = buffer.indexOf(delimiter)) !== -1){
res.push(buffer.slice(0, n));
buffer = buffer.slice(n + delimiter.length);
}
res.push(buffer);
return res;
}
console.log(bufferSplit(buffer, '\r\n').map(e => e.toString()));
//原生 node.js 实现post上传文件
const http = require('http');
const util = require('buffer_util.js');
const fs = require('fs');
http.createServer((req, res) => {
let boundary='--'+req.headers['content-type'].split('; ')[1].split('=')[1];
let arr = [];
req.on('data', Buffer => {
arr.push(Buffer);
});
req.on('end', () => {
let buffer = Buffer.concat(arr);
let res = util.bufferSplit(buffer, boundary);
// console.log(res);
res.pop();
res.shift();
res.forEach(buffer => {
buffer = buffer.slice(2, buffer.length - 2);
let n = buffer.indexOf('\r\n\r\n');
let info=buffer.slice(0, n).toString();
let data=buffer.slice(n+4);
// console.log(info);
/*
Content-Disposition: form-data; name="username"
Content-Disposition: form-data; name="password"
Content-Disposition: form-data; name="f1"; filename="prototype.png"
Content-Type: image/png
*/
if(info.indexOf('\r\n') !== -1){
//文件
let res2 = info.split('\r\n')[0].split(';');
let name = res2[1].split('=')[1];
let filename = res2[2].split('=')[1];
name = name.substring(1, name.length-1);
filename = filename.substring(1, filename.length-1);
// console.log(name); //"f1"
fs.writeFile(`upload/${filename}`, data, err => {
if(err){
console.log(err);
}else{
console.log('上传成功');
}
})
}else{
//普通信息
let name = info.split('; ')[1].split('=')[1];
name = name.substring(1, name.length - 1);
console.log(name)
}
})
});
}).listen(8080);
//使用 multiparty 实现表单提交处理
const http = require('http');
const multiparty = require('multiparty');
http.createServer((req, res)=>{
let form = new multiparty.Form({
uploadDir: './upload'
});
form.parse(req);
form.on('field', (name, value) => {
console.log('字段:', name, value);
});
form.on('file', (name, file) => {
console.log('文件:', name, file);
});
form.on('close', () => {
console.log('表单解析完成');
});
}).listen(8080);
// CORS 跨域共享
const http=require('http');
let allowOrigin={
'http://localhost': true,
'http://aaa.com': true,
'https://aaa.com': true,
}
http.createServer((req, res)=>{
let {origin}=req.headers;
if(allowOrigin[origin]){
res.setHeader('access-control-allow-origin', '*');
}
res.write('{"a": 12, "b": "Blue"}');
res.end();
}).listen(8080);