学习 Node.js 的时候遇到有 demo 内容看不懂,想请教各位前辈

2018-03-20 22:34:21 +08:00
 OrangeXO

前端小白,正在学习使用 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);

1449 次点击
所在节点    问与答
8 条回复
echolwn
2018-03-20 23:07:27 +08:00
你这是用的原生的 node ?上下连贯吗?你有没有省略一些代码呀?
OrangeXO
2018-03-20 23:14:49 +08:00
@echolwn 谢谢哦!使用 node 的文件全部都在这里了,没有放上来的是 ajax 部分和点击部分,会影响判断吗?
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 }
lwbjing
2018-03-20 23:49:42 +08:00
这回复的 md 有毒...
lijsh
2018-03-20 23:51:27 +08:00
没看出什么太难的地方,建议你把代码再格式化一下,方便大家帮你看。
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';
效果同理
OrangeXO
2018-03-21 12:10:46 +08:00
@lwbjing 谢谢前辈🙏
OrangeXO
2018-03-21 12:11:08 +08:00
@haozxuan001 谢谢前辈🙏

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/439889

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX