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
-
表单
-
-
服务器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("
你是vip 进入吧
"); //通过send返回一个值 }else{ resp.send("对不起,滚吧
"); } 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
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("你是vip 进入吧
"); // redirect 重定向页面 // resp.redirect("http://www.biadu.com"); resp.redirect("index.html");//跳转页面,路径变了 // resp.sendfile("./public/index.html");//发送页面,路径不变 }else{ // resp.send("对不起,滚吧
"); 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