Augular+Node+Python搭建网站的历程
AJ+NJ搭建一个小网站的例子数不胜数,我也不费力去说。这篇文章假设大家已经对以上提到的语言有一定基础。我把自己再搭建过程中的想法、遇到的一些问题以及部分问题的解决的方法记录下来,希望对大家有帮助。
if (path == '/getimage'){
header = res1.headers;
console.log(header['set-cookie'].toString());
var mycookie = header['set-cookie'].toString().split(";")[0];
console.log(mycookie);
u_m[arg_uuid] = mycookie;
console.log(u_m);
var options = {
url :
method : 'GET',
headers : {'Cookie':mycookie}
};
request(options).pipe(res);
});
}
上述代码完成的工作就是获取cookie并根据相应cookie去请求验证码图片。而对应的cookie保存在了数组中。那么此步骤完成之后,我们在网页中就可以通过指定 <img src = '/getimage'>
来获得验证码图片了。但是接下来我们以后的操作要用到请求图片时所得到cookie,而我们上一步仅仅是将起保存在了u_m这个数组中。所以我们仍需定制一个路由用来返回cookie。
if (path == '/getcookie'){
res.end(u_m[arg_uuid]);
}
res.setHeader("Access-Control-Allow-Origin","http://127.0.0.1:8088")
那么只需要在服务器的响应流中添加一个响应头属性Access-Control-Allow-Origin,就搞定了,是不是很简单地就解决了跨域访问的限制了!
接下来我们聊一聊如何将node与python连接起来呢。网上也有很多方案,这里我们就说最简单的,通过系统的输入输出流来进行调用
import sys
studentId = sys.argv[1]
password = sys.argv[2]
x = sys.argv[3]
img_cookie = sys.argv[4]
我们在python中引入sys模块,通过sys.argv的方式获得传入参数。其中为什么第一个参数的下标从1开始呢?我们现来看看一看在node中如何调用python并传入参数。
exec('python htt.py '+stdid+' '+stdpwd+' '+yzm+' '+cookie,function(err,stdout,stderr){
if(err)
{
res.end('出错啦,请重新尝试');
console.log('stderr',err);
}else if(stdout)
{
console.log('py Result:-----------------------');
console.log(stdout);
res.end(stdout);
}
});
我们在node中通过exec('python 脚本名.py 参数1 参数2 参数3...',FUN()),所以说我们获取参数的argv数组第0个是脚本名字,而参数1从角标1开始。
我们在掌握以上的要点之后就可以对上一篇博客中的python脚本进行改造,原本我们需要联网获得的验证码图片,cookie,以及输入全部替换成参数的形式,最终提交到教务网服务器,并返回结果。
在我们完成以上步骤之后,我们就可以在AngularJS中通过/getcookie路由成功获得cookie之后,将表单信息整理成学号、密码、输入验证码,cookie,并提交到路由,后端路由将参数解析,并请求教务网返回结果。返回的结果在包装成html格式,返回给AngularJS,AngularJS获得输入流之后,最终渲染页面,更新绑定值,显示结果。
最后一步呢,我们不管是请求成功还是不成功,都得重新刷新验证码,以便与用户继续查询。同时人性化设计,如果用户看不清验证码那么要有更换图片的功能。于是我们将获取验证码的代码提取成一个模块changePic()
changePic = function(){
a = new Date().getTime();
document.getElementById("yzmimg").src = "http://127.0.0.1:8080/getimage?uuid=" + a;
}
搞定之后我们的功能就大致实现了。增加一些错误的捕捉,检查。最后我将这个小网站挂在了阿里云上,测试效果不错。这里就不贴网址了,小小菜鸟,怕大佬来攻击我 /笑哭!