因为公司不能使用微信、网盘等一些云同步软件,即使只是想把手机上的一段文字或者一张图片上传到电脑上,也只能这样通过email发送,在比较频繁的时候,一次发一封还是比较麻烦的,想要一个简单直观的方法来满足这个小需求。于是想到通过微信公众平台实现,通过微信公众号上传一段文字或者图片,最后通过电脑访问,简单写了一个原型,如下图:简单功能实现:发送文字和图片到公众号,返回访问链接;图片直接下载到本地存储,图片以时间戳命名;数据以JSON文件存储方式保存,可查看最近发送的所有文字或图片;功能比较简单,整个代码130+行。基本没有前台,拼接字符串写的HTML;基本没有后台,整体使用expressWeb框架,用于微信交互的wechat模块;用于下载图片的下载模块。这里简单介绍一下实现的细节。首先/根目录接受微信信息,如下:app.use('/',wechat(config,function(req,res,next){varmessage=req.weixin;console.log(message);varFromUserName=message.FromUserName;varCreateTime=newDate().getTime();varfile=path.join(process.cwd(),'/.data/.',FromUserName);vardata={};//保存每条消息的时间,字段为CreateTimedata.CreateTime=CreateTime;switch(message.MsgType){case'text':varContent=message.Content;data.text=Content;//当是文本内容时,保存文本字段storeData(file,data,function(result){if(result=='success'){res.reply("请访问:http://pengloo53.eicp.net/user/"+FromUserName);}else{res.reply(result);}});中断;case'image':varPicUrl=message.PicUrl;varpicName=newDate().getTime()+'.png';varimagePath=path.join(process.cwd(),'/.data/dist/',picName);data.image=picName;//当是图片内容时,保存图片字段(Timestamp命名)downloadPic(PicUrl,imagePath,function(result){if(result=='success'){storeData(file,data,function(result){if(result=='success'){res.reply("图片上传成功,请在浏览器中访问:http://pengloo53.eicp.net/user/"+FromUserName);}else{res.reply(result);}})}});休息;default:res.reply('欢迎使用showshow插件,请输入文字或图片!');}}));这里只是文字和图片的微信消息类型,即只接受和处理文字信息和图片信息;每条消息都是一个Object,通过键值对、一个CreateTime、一个文本或图片保存数据;每条消息都作为一个对象推送保存在数据数组中,最后以JSON的形式保存到文件中,每个用户对应一个数据文件,而不是数据库的Function实现代码如下://初始化数据functioninitData(file,callback){fs.stat(file,function(err){if(err){callback([]);}else{varcontent=[];fs.readFile(file,'utf8',function(err,result){if(err){callback([]);}content=JSON.parse(result.toString()||[]);回调(内容);});}});}//插入新数据并保存在本地functionstoreData(file,data,callback){initData(file,function(result){result.push(data);fs.writeFile(file,JSON.stringify(result),function(err){if(err){callback(err);}else{callback('success');console.log('storesuccess.');}});})}lastview服务器通过GET请求获取信息,达到向PC传输数据的目的。定义一个GET路由,指定路径为/user/:id,id为微信用户的OpenID;app.get('/user/:id',function(req,res,next){varpathname=url.parse(req.url).pathname;varmatch=pathname.match(/^\/user\/(.+)/);if(match){varusername=match[1];varfile=path.join(process.cwd(),'/.data/',username);varpageContent='';initData(file,function(result){for(vari=result.length-1;i>=0;i--){vardateDisplay=newDate(result[i].CreateTime*1);vartext=result[i.text;varimage=result[i].image;pageContent+='
'+dateDisplay.toLocaleString()+'
';if(text){pageContent+=''+text+'
';}else{pageContent+='';}res.send(pageContent);});}});倒序显示消息,最后显示如上,页面比较简单,想通过jade模板引擎写一个漂亮的首页源码:Node_note/showshow.js,写的不好请指正。现在可以关注这个公众号来体验一下效果。如有bug或服务器无响应请见谅(家里Macmini服务的服务器可能不再提供服务)。