Node.js做登录& 上传文件

    好了,今天上午写一下这段时间的总结吧。

    背景:就是要写一个项目的一部分,从前端到后台,其实前端要写的东西比较少,主要是用一些写好的组件,网页大体的样子都已经有了,其实主要还是写后台。2333那么问题来了,我是写前端的,后台几乎没有写过,就是学校里的时候做过一个图书管理系统,用PHP写过增删改查,除此之外没有任何后端语言等相关基础。简单说一下我现在要写的那个东西用到的东西,React(我只写过demo),Node.js(我只写过最简单的那个创建服务器的demo)。

    需求来的时候咋一看,这个东西好像还不是那么难。说起来我做的就是登陆,上传文件,把文件的信息写入数据库,读出来显示在页面,更新一些状态,就这些,我做到现在也算做了两周多了,还没有做完,主要是记录总结一下我遇到的问题。(整个惨痛的心路历程)

首先要做这个东西我的天,啥都不会啊,(脑补我此时的表情)

需求还没有下来的时候,我大致看了一下,Node.js,express的文档,ES6大概都过了一遍。

一开始是做登录,就是一打开页面后台直接去登录,刚开始立马想到了ajax,单纯的我以为登录只需要用户名和密码(其实你在真实登录的时候还有一些隐藏的字段,特别是像360那样的安全性做的比较好的网站),使用post方式,数据放在请求体里不就好了吗,我刚写了下伪代码,就被否定了。导师说这个有跨域问题啊,,,Node.js不存在跨域的,那就用node写吧,写的第一个登录比较简单,用Fidder抓包。主要的他的字段都是

<input type='hidden'/>

这样子藏在表单里面的,那就直接去请求网页的源代码,拿到这些字段的值,
request.post(url,
   {form:formData},
    function(err,httpRes,body){
      var cookies = httpRes.headers['set-cookie'];
});

在回调里面就可以拿到cookie了 。
httpRes.headers['set-cookie']

这里的问题就是怎么拿到那些个input的值,字符串的方法虽然可以做但是比较繁琐,正则简洁高效但是有一个致命的缺点就是我不会用,2333,一用到正则全靠百度,最后还是请教了大神之后两三行代码就搞定了。再推荐一个东西cheerio,就是node里面的jquery,非常好用。这里面还有一个问题就是cookie是在回调函数里面拿到的,所以下一步你要上传文件的话要等到拿到cookie之后吧,这时候你就会发现异步的坏处啦,顺序调用登录和上传文件的函数你会发现登录还没有执行完呢,上传的函数已经开始执行了,解决这个问题,promise,Q都是不错的选择,这个就不多说了,找一个demo很容易就懂了。

   好,登录已经写好了,下面就说一下上传文件是怎么做的,上传这块儿,前端的话最简单的就是写个form表单,action到url,后台是用接收是用multer做的。Git上面有文档的,自己看一下(QAQ都是英文的)后台这块涉及到配置路由什么的,本宝宝也是似懂非懂,导师写了个demo给我,大概也算了明白他是怎么跑的了吧。Multer是先传至node服务器(其实我感觉就是一个本地的文件夹),然后再上传至你指定的那个url,所以现在你要拿到文件的名字,并作为参数传给上传的函数,上传的时候还是用request,

request.post(options,callback)。
var options = {
     url: url,
     formData: uploadFormData,
     headers: {
       'Content-Type':'multipart/form-data',
       'Cookie':cookieString
     }
};

直接上代码吧,这个options就是一个对象,里面可以写好多参数,上传的话formData必须写formData,不要问我为什么,登陆的时候是可以写fom的,formData会自动向里面加一些东西的。 url就是你要上传去哪里的那个地址,uploadFormData,这个就是你要上传的文件,但是里面除了文件之外可能还有一些别的参数,这个就要自己去抓包,看一下除了文件还会传什么参数。做完了这一步上传成功与否,自己去那个网页上看。还有一个问题就是如果已经登录过,那么已经有cookie了,所以再去登录就不会返回cookie了。

   做完了这一步,应该在前端页面有一个弹出框,告诉用户上传成功了,然后再让用户补充一下对这个文件的描述啊以及一些相关的信息。填完之后把数据写到数据库。其实难的部分在哪里呢???写一个sql语句把数据加到数据库??不是,数据是在前端拿到的,怎么把数据给后台并且让他去做一些操作完成对数据库的操作。简言之,就是交互。前端和后台之间的交互,之前都说了,从没写过后台,更不懂这个前端要怎么把数据给后台。好,这个怎么弄,其实上传文件那块已经用到了。

    具体的下次再说,还有一些安全性比较高的网站如何做登录。

猜你喜欢

转载自blog.csdn.net/smallsun_229/article/details/60869838