我靠这个路由有点蒙蔽 并没有看懂原理只能用。。源代码也并没有看懂 揪心。。。。。
一定要深入研究下弄懂原理。。。
首先:
通过应用生成器工具 express 可以快速创建一个应用的骨架。
- 安装
在cmd中以管理员输入 : npm install express-generator -g - 设置视图模板
在文件夹下shell中输入:express --view=ejs demo1 - 常用操作
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相同