前端小白,正在学习使用 Node.js 做登陆和注册,下面 demo 遇到不明白的地方,希望前辈们能指点:
1、数据是怎么进入 var users={}的呢? 2、这种写法是什么意思 users[GET.user]?为什么可以这样写?
谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢。。。。。。。
const http=require('http');
const fs=require('fs');
const querystring=require('querystring');
const urlLib=require('url');
var users={};
var server=http.createServer(function (req, res){
var str=''; req.on('data', function (data){ str+=data; });
req.on('end', function (){ var obj=urlLib.parse(req.url, true);
const url=obj.pathname; const GET=obj.query; const POST=querystring.parse(str); if(url=='/user'){ //接口 switch(GET.act){ case 'reg': //1.检查用户名是否已经有了 if(users[GET.user]){ console.log(users) console.log(users[GET.user]) res.write('{"ok": false, "msg": "此用户已存在"}'); }else{ //2.插入 users users[GET.user]=GET.pass; res.write('{"ok": true, "msg": "注册成功"}'); } break; case 'login': //1.检查用户是否存在 if(users[GET.user]==null){ res.write('{"ok": false, "msg": "此用户不存在"}'); //2.检查用户密码 }else if(users[GET.user]!=GET.pass){ res.write('{"ok": false, "msg": "用户名或密码有误"}'); }else{ res.write('{"ok": true, "msg": "登录成功"}'); } break; default: res.write('{"ok": false, "msg": "未知的 act"}'); } res.end(); }else{ //文件 //读取文件 var file_name='./file'+url; fs.readFile(file_name, function (err, data){ if(err){ res.write('404'); }else{ res.write(data); } res.end(); }); }
}); });
server.listen(6036);
1 echolwn 2018-03-20 23:07:27 +08:00 你这是用的原生的 node ?上下连贯吗?你有没有省略一些代码呀? |
2 OrangeXO OP @echolwn 谢谢哦!使用 node 的文件全部都在这里了,没有放上来的是 ajax 部分和点击部分,会影响判断吗? |
![]() | 3 lwbjing 2018-03-20 23:49:10 +08:00 ![]() 对象的[] 相当于数组的下标,只不过对象的下标标识得是个字符串 ``` var obj = {}; // obj['num'] = 123; // obj.num = 123; // 这两个写法是一样的 ``` ==== 还可以这样 ``` var obj = {}, key = 'num'; // obj[key] = 123; // 同上 ``` 或者这样 ``` var obj = {}, key = 'n'; // obj[key + 'um'] = 123; // 同上 ``` 上述的 obj = { num: 123 } |
![]() | 4 lwbjing 2018-03-20 23:49:42 +08:00 这回复的 md 有毒... |
![]() | 5 lijsh   2018-03-20 23:51:27 +08:00 没看出什么太难的地方,建议你把代码再格式化一下,方便大家帮你看。 |
6 haozxuan001 2018-03-21 10:25:41 +08:00 ![]() 第一个问题,数据通过这条语句判断( if(users[GET.user])),如果 users 对象中不存在这个数据则进入 else 分支进行 users 数据填充; 第二个问题,这段代码有歧义,本身 GET。POST 等大写字母表示的是请求方式,会误导初学者,你大可以换成 temp 等字段,至于为什么可以这么写,js 最基础的语法,如何向对象中创建属性: var s = {}; s.name = 'v2ex'; 或在你不知道对象 key 的时候 var s = {}; var s1 = 'name'; s[s1] = 'v2ex'; 效果同理 |
8 OrangeXO OP @haozxuan001 谢谢前辈 |