V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
OrangeXO
V2EX  ›  问与答

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

  •  
  •   OrangeXO · 2018-03-20 22:34:21 +08:00 · 1450 次点击
    这是一个创建于 2472 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    8 条回复    2018-03-21 12:11:08 +08:00
    echolwn
        1
    echolwn  
       2018-03-20 23:07:27 +08:00
    你这是用的原生的 node ?上下连贯吗?你有没有省略一些代码呀?
    OrangeXO
        2
    OrangeXO  
    OP
       2018-03-20 23:14:49 +08:00
    @echolwn 谢谢哦!使用 node 的文件全部都在这里了,没有放上来的是 ajax 部分和点击部分,会影响判断吗?
    lwbjing
        3
    lwbjing  
       2018-03-20 23:49:10 +08:00   ❤️ 1
    对象的[] 相当于数组的下标,只不过对象的下标标识得是个字符串

    ```
    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
        4
    lwbjing  
       2018-03-20 23:49:42 +08:00
    这回复的 md 有毒...
    lijsh
        5
    lijsh  
       2018-03-20 23:51:27 +08:00
    没看出什么太难的地方,建议你把代码再格式化一下,方便大家帮你看。
    haozxuan001
        6
    haozxuan001  
       2018-03-21 10:25:41 +08:00   ❤️ 1
    第一个问题,数据通过这条语句判断( 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
        7
    OrangeXO  
    OP
       2018-03-21 12:10:46 +08:00
    @lwbjing 谢谢前辈🙏
    OrangeXO
        8
    OrangeXO  
    OP
       2018-03-21 12:11:08 +08:00
    @haozxuan001 谢谢前辈🙏
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2796 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:26 · PVG 08:26 · LAX 16:26 · JFK 19:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.