一、express介绍:html
Express是简介灵活的nodeJs web应用开发框架node
它提供了一系列强大的功能:路由控制、参数获取、中间件、send和sendFie、web
静态文件服务器、模板解析、重定向express
二、使用express:npm
安装:npm install expressjson
三步骤:数组
var express = require("express");服务器
var app = express();cookie
app.listen(8080);app
三、路由:
get请求: app.get( '/', function( req, res ){ res.end("首页") })
-- request: 请求对象 获取客户端的请求
-- response: 响应对象 向客户端发送响应
-- ren.end() 只能放字符串+buffer,
-- ren.send() 能接任何类型的参数
app.all: app.all("*",function( req, res ){ res.end("此页面不存在") })
-- all匹配全部的方法名, * 代码匹配全部的路径
/* 用户: user/signup 登陆 user/signin 注册 user/sigout 退出
文章: article/add 添加文章 article/list 文章列表 */
四、获取请求参数:
app.get("/food",function (req,res) {
console.log( req.method ); //请求方法
console.log( req.url ); //请求的url
console.log( req.path ); //pathname /food
console.log( req.query ); //查询字符串对象
console.log( req.headers ); //请求头对象
res.end();
});
params路径参数:"/user/:id/:name"
app.get("/user/:id/:name" , function(){
console.log( req.params.id ); //动态传递id,根据id获取相关内容
console.log( req.params.name );
console.log( req.params.host );
//获取端口号+域名
console.log( req.headers ); //整个头部信息
console.log( req.headers.host ); //获取端口号+域名,单独获取只须要分割一下。
})
例子:
五、中间件 - use:
use的做用:一、添加公共的处理逻辑。 二、给请求或响应对象上增长公用的方法和属性 req.path
app.use('/',function( req, res, next ){
//中间件自己也是一个函数
//next 是一个函数,调用它表示向下执行, 不调用会直接卡在此处或者直接结束
})
六、静态文件 public
-- public:参数是静态文件根目录
-- path.join( __dirname, 'public' ) 当前文件的绝对路径
-- path.resolve('public') 与上相等,找到public的绝对路径
-- 此中间件先会去静态目录下找,找到直接返回,未找到,next向下执行看有没有路由能执行
app.use( express.static( path.resolve('public') ) ); //匹配全部
app.use('/user', express.static( path.resolve('public') ) ); //匹配user
设置模板引擎
app.set('view engine','html'); // ejs html设置模板引擎,就至关于设置了一个变量,用get读
app.set('views',path.resolve('views') ); //设置模板存放的根目录 前:key 后:目录
app.engine('html',require('ejs').__express ); //若是模板后缀是html的话 用ejs的方法渲染来进行 ejs须要安装
-- 多个模板都会用到的变量,并且变量值都同样的状况下 ,能够提取出来写
app.use(function (req,res,next) {
res.locals.title = "title";
next();
});
app.get('/users',function (req,res,next) { // get 配置路由 + 获取变量
res.locals.users = users ; //真正渲染的时候,会把数据对象的属性所有拷贝给 res.locals
res.render( 'user.html',{ users:users , title:"title" } ); // 1参:相对路径,相对于views的 2参:数据对象
//渲染视图,只能写至关于路径 后缀可略
//res.render( 'user' );
});
解析json:
-- body-parser 须要安装; npm install body-parser
var bodyParser = require('body-parser'); //解析json
--当请求体的类型是urlencoded格式的话,用此中间件请求体转成对象
--url只能放ascii,128个,若是传中文,要将中文转ascii使用 encodeURIComponent('中文');
app.use( bodyParser.urlencoded( {extended:true} ) ); //解析设置 提交表单的时候
app.use( bodyParser.json() );
eg:
var express = require("express");
var path = require("path");
var bodyParser = require("body-parser"); //解析json
var cookieParser = require('cookie-parser'); //cookie-parser
var app = express();
app.use( cookieParser() ); //使用cookieParser中间件只会 会增长req.cookies属性
app.use( bodyParser.urlencoded( { extended:true }) ); //解析设置
app.use( bodyParser.json() );
app.set('view engine','html');
app.set("views",path.resolve('views'));
app.engine('html',require('ejs').__express ); //解析html中的ejs
var users =[];
/*---------------------注册--------------------*/
app.get('/signup',function (req,res) {
var error = req.cookies.error;
res.clearCookie('error'); //清除cookies
res.render('up',{ error });
});
app.post('/signup',function (req,res,next) {
var user = req.body;
//找一下用户数组中有没有相同用户名的用户
var oldUser = users.find(function ( item ) {
return item.username == user.username;
});
if(oldUser){ //找到了用户名,跳到注册页重写
res.cookie('error','此用户名已经被占用');
res.redirect('back'); }else { //没找到就注册,而且跳到登录页面 users.push( user ); res.redirect('/signin') } }); /*-------------------登录----------------------*/ app.get('/signin',function (req,res) { var error = req.cookies.error; res.clearCookie('error'); //清除cookies res.render('in'); }); app.post('/signin',function (req,res,next) { var user = req.body; var flag = users.find(function ( item ) { return user.username == item.username && user.password == item.password }); if( flag ){ res.cookie('yes','登录成功...'); res.redirect('/welcome') }else { res.cookie('error','用户名密码错误'); //error会覆盖上面的error res.redirect('back'); } }); app.get('/welcome',function (req,res,next) { var yes = req.cookies.yes; res.render('welcome',{ yes }) }) app.listen(9090);