【个人笔记】《知了堂》express模块
NPM 包管理器
Node package module ==>简称npm
类似的bower
安装express
1.全局Npm install express -g
2.项目中安装
项目中安装
Npm init 初始化项目
Npm init -y 初始化简写 不用输入这些项目描述
会产生一个package.json文件
如果项目迁移 只需要拷贝项目文件 及 package.json文件 不需要拷贝下载的模块包
只需要运行 npm install 会自动安装所有的依赖
项目 npm install express@3 --save-dev
Npm intstall 包名字@版本号 --save-dev
Npm intstall 包名字@版本号 --save
--save-dev 或者--save 安装到package.json作为依赖
--save-dev会保存在devDependencies里的是开发用的,
--save 会保存在dependencies里的是开发完上线时用的
构建项目目录
- Routes
- Views
- Public
- Css
- Style.css
- Images
- Js
- Index.html
- form.html
- Css
- Dist
- App.js
- Package.json
- Node_modules
App.js中使用es6语法
// 要使用es6 先使用严格模式 "use strict";
// let 块级作用域的局部变量
// var 在es6中全局
// const 常量 定义后不允许修改 "use strict";
const express=require("express");
// 要使用es6 先使用严格模式 "use strict";
// let 块级作用域的局部变量
// var 在es6中全局
// const 常量 定义后不允许修改
const app=express();
app.listen(8888,function(){
console.log("服务器启动,端口是8888")
配置服务器 app.js
express框架配置,内容有哪些
访问日志,详细记录服务器执行了哪些操作,当发生错误时可以记录下来
处理请求,get,post配置一下怎么去处理
路由配置
静态资源路径配置
错误报告
express的配置分 set设置,use使用,所有express的使用信息都写在configure里面
"use strict";
const express=require("express");
// 要使用es6 先使用严格模式 "use strict";
// let 块级作用域的局部变量
// var 在es6中全局
// const 常量 定义后不允许修改
const app=express();
app.configure(function(){
app.use(express.logger("dev"));//开发者日志
app.use(app.router);//路由
app.use(express.static(__dirname+"静态地址"));//设置静态资源路径。__dirname根目录
app.use(express.favicon(__dirname+"图标"));//网页小图标
app.use(express.errorHandler());//打印错误信息
}) app.set("port",8888);//设置端口
app.listen(app.get("port"),function(){
console.log("服务器启动,端口是"+app.get("port"));
})
数据类型请求get
页面提交数据form.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>表单</title>
</head>
<body>
<!-- <form action="提交地址 url" method="方法 提交表单的方式 get/post"> -->
<form action="login" method="get">
<h1>登陆</h1>
用户名:<input type="text" name="userName">//必须加那么值
密码:<input type="password" name="pwd">
<input type="submit">
</form>
</body>
</html>
服务器app.js拦截请求
app.get("/拦截的地址",function(req,resp){
console.log("请求进来了")
})
获取form.html传过来的数据 并且做判断
app.get("/login",function(req,resp){
console.log(req.query.userName)
// 所有的数据保存在请求对象上的query
let userName=req.query.userName;
let pwd=req.query.pwd;
if(userName=="admin"&& pwd==123456){
resp.send("<h1>你是vip 进入吧</h1>");
//通过send返回一个值
}else{
resp.send("<h1 style='color:red'>对不起,滚吧</h1>");
}
console.log("请求进来了")
})
1、Send(“ok”) 返回数据
2、Redirect(“index.html”) 重定向页面,路径变
还可以跳转到百度
resp.redirect("http://www.biadu.com");
3.Sendfile(“相对路径”) 发送页面的意思,路径不变
resp.sendfile("./public/index.html");//发送页面,路径不变
数据类型请求post
- post和get的区别
- 第一个区别:在地址栏上表现的不一样,get输入的值会现在在url上,也就是说值是通过url来传递,演示去掉name属性,那用户名就不能传递给服务器,那我们在服务器里面应用表单的时候就要给表单域加上name属性,因为要知道是哪个输入框输入的值,并且服务器要把这些值拿到进行一个处理,如果没有name属性里就根本拿不到。
- 第二个区别:哪个更加安全→post,不会把表单的值现在url地址栏,所以安全性更高
- 第三个区别:get请求的值有长度限制,超出的就会做一个截取,但是太长也会增加服务器处理的负担,post没有限制,所以基本不用考虑
- 第四个区别:get请求只能传输字符类的值,post可以上传文件类型的
- 第五个区别:get是 通过把整个url传输的方式,post会进行拆分,后台会进行整合,通过bodyparser,这样就很安全。
配置express
app.configure(function(){
app.use(express.logger("dev"));//开发者日志
app.use(express.bodyParser());//bodyparser进行post请求处理
app.use(express.methodOverride());//方法重写的方式 协助处理post请求模块,把所有非get请求转化为
post请求,http请求只会讨论get,post,(put,delete是通信这些才会用到不讨论)
app.use(app.router);//路由
app.use(express.static(__dirname+"/public"));//设置静态资源路径。__dirname根目录
app.use(express.favicon(__dirname+"/public/images/favicon.png"));//网页小图标
app.use(express.errorHandler());//打印错误信息
})
Form.html
<form action="login.do" method="post">
<h1>登陆post</h1>
<!-- 必须加那么值 -->
用户名:<input type="text" name="userName">
密码:<input type="password" name="pwd">
<input type="submit">
</form>
App.js服务器拦截login.do
// post请求
app.post("/login.do",function(req,resp){
console.log(req.body)
let userName=req.body.userName;
let pwd=req.body.pwd;
if(userName=="admin"&&pwd==123){
resp.redirect("index.html")
}else{
resp.redirect("form.html")
}
})
路由
(一)Routes新建logingRouter.js
// 导出get的处理程序
exports.loginGet=function(req,resp){
console.log(req.query.userName)
// 所有的数据保存在请求对象上的query
let userName=req.query.userName;
let pwd=req.query.pwd;
if(userName=="admin"&& pwd==123456){
// send是返回数据
// resp.send("<h1>你是vip 进入吧</h1>");
// redirect 重定向页面
// resp.redirect("http://www.biadu.com");
resp.redirect("index.html");//跳转页面,路径变了
// resp.sendfile("./public/index.html");//发送页面,路径不变
}else{
// resp.send("<h1 style='color:red'>对不起,滚吧</h1>");
resp.redirect("form.html");
}
console.log("请求进来了")
}
// 导出post的处理程序
exports.loginPost=function(req,resp){
console.log(req.body)
let userName=req.body.userName;
let pwd=req.body.pwd;
if(userName=="admin"&&pwd==123){
resp.redirect("index.html")
}else{
resp.redirect("form.html")
}
}
App.js引入路由文件
const loginRouter=require("./routes/loginRouter");
nodejs模块中exports和module.exports的区别
通过Node.js的官方API可以看到Node.js本身提供了很多核心模块。这些核心模块被编译成二进制文件,可以通过require('模块名')去获取;核心模块具有最高的加载优先级(有模块与核心模块同名时会体现),如:
var http=require('http')
var fs=require('fs');
文件模块访问方式通过require('/文件名.后缀') 去访问,文件后缀可以省略;以"/"开头是以绝对路径去加载,以"./"开头和以"../"开头表示以相对路径加载,而以"./"开头表示同级目录下文件,如:
const ql = require("./db.js") //本目录下的db.js
exports和module.exports;提供了外部访问的接口
(exports和module.exports,是对外暴露文件,再引用,属于文件模块。核心模块由node写好,直接引用就行)
exports
是指向的module.exports
的引用module.exports
初始值为一个空对象{}
,所以exports
初始值也是{}
require()
返回的是module.exports
而不是exports
【个人笔记】《知了堂》express模块的更多相关文章
- [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第1讲(实现思路与游戏界面的实现)
整体效果展示: 一.实现思路 如图,这是我完成该项目的一个逻辑图,也是一个功能模块完成的顺序图. 游戏界面的完成 英雄飞机对象实现,在实现发射子弹方法过程中,又引出了子弹对象并实现.在此时,英雄飞机能 ...
- [知了堂学习笔记]_MVC设计模式与JavaWEB三层架构
一.MVC设计模式 MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controlle ...
- [知了堂学习笔记]_JSON数据操作第2讲(JSON的封装与解析)
上一讲为大家讲了什么是JSON,那么这一讲为大家带来了在WEB项目中JSON的用法,也就是JSON的封装与解析. 此图是数据库中的部分内容 一.JSON封装 所谓的JSON封装,指的是在Servlet ...
- [知了堂学习笔记]_JSON数据操作第1讲(初识JSON)
一.认识JSON 什么是JSON? JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式..它基于 ECMAScript (w3c制定的js规 ...
- [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第3讲(逻辑方法的实现)
整体展示: 上一讲实现了诸多对象,这次我们就需要实现许多逻辑方法,如控制飞机移动,判断子弹击中敌机,敌机与英雄飞机相撞等等.并且我们在实现这些功能的时候需要计时器去调用这些方法.setInterval ...
- [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第2讲(对象的实现及全局变量的定义)
整体展示: 一.全局变量 /*===================玩家参数==========================*/ var myPlane; //英雄对象 var leftbtn = ...
- 【知了堂学习笔记】_String、StringBuffer与StringBuilder的区别
String Stringbuffer StringBuilder的区别: 1.string是字符串常量,且长度是不可改变的,Stringbuffer.stringBuilder是字符串变量 2.S ...
- [知了堂学习笔记]_ajax的两种使用方式
一.Ajax概述 1.什么是同步,什么是异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待 卡死状态 异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都 ...
- [知了堂学习笔记]_eclipse引入svn插件,并将项目同步到svn
1. eclipse中不存在SVN问题的解决 1.1发现Team->Share project 下没有svn. 1.2下载安装svn插件. 选择help->Eclipse Marketpl ...
- [知了堂学习笔记]_牵线Eclipse和Tomcat第二篇 —— 安装Tomcat&&添加Tomcat到Eclipse
来了来了~~~~~我们的"织女"--Tomcat来了,牛郎们等急了吧!哈哈! 一.安装Tomcat 下载地址:http://tomcat.apache.org/download-7 ...
随机推荐
- 面试 | 商汤科技面试经历之Promise红绿灯的实现
说在前面 说实话,刚开始在听到这个面试题的实话,我是诧异的,红绿灯?这不是单片机.FPGA.F28335.PLC的实验吗?! 而且还要用Promise去写,当时我确实没思路,只好硬着头皮去写,下来再r ...
- 震惊!WIN2003存在后门大全,提权成功率高
从某种意义上说,服务器被攻击是不可避免的,甚至被控制也情有可原.但绝对不能容忍的是,服务器被植入后门,攻击者如入无人之境,而管理者去浑然不觉.本文将对当前比较流行的后门技术进行解析,知己知彼方能杜绝 ...
- 关于RESTful接口api的设计
你封装api的话,你对同城,你相当于客户端,你只顺应他的签权机制:别人调你的话,你有一套签权机制,别人就是客户端,只顺应你的签权:这样就统一了,容易扩展,以后你接了几套签权,别人对你还是一套,你们就是 ...
- JRE 和 JDK 的区别
JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库.是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的. JDK顾名思义是java开发 ...
- java中接口实现多态举例
public class Test4 { public static void main(String[] args){ Instrument ss[]={new Wind(),new Piano() ...
- ElasticSearch和Kibana 5.X集群的安装
ElasticSearch和Kibana 5.X集群的安装 1.准备工作 1.1.下载安装包 1.2.系统的准备 2.ElasticSearch集群的安装 2.1.修改 config/elastics ...
- plsql developer 恢复默认布局界面
tools-preferences-appearance-(reset docking,reset toolbars)
- AFN和SDWebImage请求网络图片的一点问题
问题1.AFN 处理有关图片相关的请求的问题 在使用AFN Post网络图片的时候发现NSLocalizedDescription=Request failed: unacceptable conte ...
- 终于知道如何使Tab控件的不出现白边的方法了
如下图,在棋盘右侧添加了Tab控件,做成属性页的样子,但出现了白边,很不美观: 后来发现,需要把Tab空间的Owner Draw Fixed 设置为TRUE.但问题又来了,属性页上的标题文字不显示了, ...
- Squid代理服务器安装
代理服务器的功能是代替网络用户去访问网络信息,并把获得的信息返回给用户,其工作步骤大致如下: ) 客户机向代理服务器发起访问互联网的请求 ) 代理服务器收到请求后检查请求是否被允许,如果允许将会进行下 ...