express路由学习练习

我靠这个路由有点蒙蔽 并没有看懂原理只能用。。源代码也并没有看懂 揪心。。。。。
一定要深入研究下弄懂原理。。。

首先:
通过应用生成器工具 express 可以快速创建一个应用的骨架。

  1. 安装
    在cmd中以管理员输入 : npm install express-generator -g
  2. 设置视图模板
    在文件夹下shell中输入:express --view=ejs demo1
  3. 常用操作
    express -h
    -h 选项可以列出所有可用的命令行选项
    安装所有依赖包
    npm install

现在可能不太对!!!!

login为例

第一步:routes中创建login.js包并导出

const express = require('express');
const router = express.Router();

router.get('/', function(req, res, next) {
    res.render('login');
});

module.exports = router;

第二步:app中加入依赖(引入):

const loginRouter = require('./routes/login');

不知道为什么只需要地址然后第三步传入变量就可以???可能是route内封装了方法

第三步:设置路径(不知道是不是这个形容词)

app.use('/login', loginRouter);

这个方法的意思就是进入localhost:3000/login时直接读取刚才传入的const loginRouter = require('./routes/login');
也读取第一步中的login.ejs

我蒙蔽了,反正最后就是进入localhost:3000/login就进入localhost:3000/views/login.ejs

第四步:在ejs中修改a标签的href为 /login

我艹我好蒙蔽,记得好好研究下

又看了自己几遍代码好像又看懂了一些,有些头绪了,但是形容不出来。。

router.get('/', function(req, res, next) {
    res.render('login');
});

上面这段代码’/'是干啥的???没搞懂,删了还错误…

又测试了两次这个’/'就是代表当前路径(将localhost:3000/login修改为localhost:3000/login/) 如果修改成

router.get('/app', function(req, res, next) {
    res.render('login');
});

就要访问:localhost:3000/login/app
但还是很蒙

睡前想了一下 这一定是和路由有关 应该是代表路由下的跟路径 就是不知道对不对。。。


 





==================================================================================

最简单的用户登录注册练习。。跑通一下流程 项目中不可能会用到… 所有数据只是添加到数组中 刷新服务器就会消失

首先创建文件夹 util 在util中创建 util.js。

exports.users = [];

exports.isReg = (userObj,usersArr)=>{
    for(let i = 0;i<usersArr.length;i++){
        if(usersArr[i].userName === userObj.userName){
            return usersArr[i];
        }
    }
    return false;
};

exports.users = [] 装入用户信息 userName 和 loginPwd;
exports.isReg 函数判断是否已经注册过

然后修改路由reg文件

const express = require('express');
const router = express.Router();

const util = require('./../util/util');

/* GET home page. */
router.get('/', function(req, res, next) {
    res.render('register');
});

router.post('/',(req,res,next)=>{
    //获取数据
    let userName = req.body.userName;
    let loginPwd = req.body.loginPwd;
   
   
    let regUser = {
        userName,
        loginPwd
    };


    let userArr = util.users;

    let user = util.isReg(regUser,userArr);
 



    if(user === false){
        userArr.push(regUser);
        res.redirect('./login')
    }else {
        res.writeHead(200, {"Content-Type": "text/html;charset=utf-8"});
        res.send('您注册的用户已存在')
    }

});

module.exports = router;

首先引入 之前创建的util
然后根据获取post请求, 根据let userName = req.body.userName; 和 let loginPwd = req.body.loginPwd; 获取用户账号密码
然后使用es6语法:

let regUser = {
        userName,
        loginPwd
    };

将获取到的账号密码添加到对象中

    let userArr = util.users;

    let user = util.isReg(regUser,userArr);

获取外部util方法 然后根据方法判断

最后是login

const express = require('express');
const router = express.Router();
const util = require('./../util/util');

/* GET home page. */
router.get('/', function(req, res, next) {
    res.render('login');
});

router.post('/',(req,res)=>{
   let userName = req.body.userName;
   let loginPwd = req.body.loginPwd;

   let loginUser = {
       userName,
       loginPwd
   };

   let userArr = util.users;

   let user = util.isReg(loginUser,userArr);

    if(user === false){
       res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});
       res.end('您输入的用户不存在');
   }else {
        if(user.loginPwd === loginPwd){
            res.redirect('./chat');
        }else {
            res.end('密码不正确')
        }

   }
});

module.exports = router;

唯一的区别是 用户名匹配到后需要再次匹配密码。(之前的函数返回用户对象,和输入密码做对比)

知识点补充:

send 和 end 区别:
简单来说就是 如果服务器端没有数据返回到客户端 那么就可以用 res.end
但是 如果 服务器端有数据返回到客户端 这个时候必须用res.send ,不能用 res.end(会报错)

render 和 redirect:
render 返回页面内容(渲染变量到模板中),并且没有发送第二次请求
redirect 发送了第二次请求,是个跳转函数,而且会返回302的状态码

indexOf 只能用于字符串查找 对象查找会无效。

把一个对象A push到数组中,然后遍历这个数组查找和A相等的对象会查找不到。。。 原理应该是和{} === {} 为false相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值