Node.JS--WEB开发框架express

express

基于NodeJS平台,快速、开放、极简的web开发框架

req:request请求对象

res:response响应对象

const express = require('express')
let app = express()
app.listen(3000,()=>{
    console.log('Server is running')
})
//res 响应的对象
app.get('/login',function(req,res){
    console.log(req)
    res.send('<h2>这是登录的页面</h2>'); // 如果res.send(数字);则数字代表http响应状态码
});

app.get('/index',function(req,res){
    res.sendFile(__dirname+'/index.html'); // res.sendFile(文件路径);
});

app.get('/baidu',function(req,res){
    res.redirect('http://www.baidu.com');
});

app.get('/',function(req,res){
    res.redirect('/index'); // res.redirect(重定向路径);
});

获取参数

const express = require('express');

let app = express();
app.listen(3000);

// url = http://localhost:3000/login?a=1&b=2
app.get('/login',function(req,res){
    //req请求的对象
    //console.log(req.method,req.url);
    //获取查询字符串的数据并解析为对象
    console.log(req.query); //{a:'1',b:'2'}
    res.send('用户名:'+req.query.uname+'密码:'+req.query.upwd);
});

// url = http://localhost:3000/package/aa/2
app.get('/package/:pname/:pid',function(req,res){
    //获取路由传参的数据
    console.log(req.params);//对象 {pname:'aa',pid:'2'}
    res.send('包名称:'+req.params.pname+'版本号:'+req.params.pid);
});

获取post请求数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2>登录页面</h2>
    <form action="/login" method="post">
        帐号: <input type="text" name="uname"><br>
        密码: <input type="password" name="upwd"><br>
        <input type="submit">
    </form>
</body>
</html>
const express=require('express');
//引入查询字符串模块
const querystring=require('querystring');
let app=express();
app.listen(8088);

//获取登录网页路由: get  /login
app.get('/login',function(req,res){
    //响应文件
    res.sendFile(__dirname+'/login.html');
});
//根据表单的请求,来创建对应的路由
//创建路由,post  /mylogin,响应'登录成功'
app.post('/login',function(req,res){
    //获取数据,监听是否有数据传递,通过回调函数获取,此回调函数是异步!
    req.on('data',function(chunk){
        //chunk 就是分段传递的数据 , 格式为buffer , 转为字符串后为查询字符串
        console.log(chunk.toString());
        //查询字符串解析为对象
        let obj=querystring.parse(chunk.toString());
        console.log(obj);
    });
    res.send('欢迎登陆');
    console.log('send');
});

中间件

分为应用级中间件、路由级中间件、内置中间件、第三方中间件、错误处理中间件

应用级中间件

也称为自定义中间件

const express = require('express');

let router = express.Router();

//中间件:拦截对URL为/admin的请求
router.use('/index',function(req,res,next){
    //获取查询字符串传递的数据
    console.log(req.query);
    //如果用户名不是root,
    if(req.query.uname!=='root'){
        res.send('请使用管理员登录');
    }else{
        //执行下一步,可能是下一个中间件,也可能是路由
        next();
    }  
});

router.get('/index',function(req,res){
    res.send('ok');
});

module.exports=router;

内置中间件

托管静态资源:把所有的静态资源托管到指定的目录,如果浏览器请求文件,自动到该目录下查找,不需要创建路由响应文件

const express=require('express');
let app=express();
app.listen(8080);

//托管静态资源(html,css,js,img...):一旦浏览器请求文件,自动到public目录下寻找;不需要创建路由
app.use( express.static('public') );
app.use( express.static('files') );

路由器

路由级中间件

创建路由器

//index.js
const express = require('express');

let router = express.Router();

router.get('/index',function(req,res){
    res.send('ok');
});

module.exports=router;
//user.js
//引入express
const express=require('express');

//创建路由器对象
let router=express.Router();

//往路由器中添加路由
//get 127.0.0.1:8080/user/reg
router.get('/reg',function(req,res){
  res.send('这是注册');
});

//get 127.0.0.1:8080/user/list
router.get('/list',function(req,res){
  res.send('这是用户列表');
});

//导出路由器对象
//exports/module.exports
module.exports=router;

在服务器下引入并使用路由器

//app.js
const express=require('express');

//引入用户路由器自定义模块
const indexRouter=require('./index.js');
const userRouter=require('./user.js');

let app=express();
app.listen(8080);

//服务器使用路由器
app.use('/',indexRouter);
//给路由中的URL添加前缀  /user/reg
app.use('/user',userRouter);

访问形式

http://127.0.0.1:8080/路由器访问名/请求名

解析post参数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2>登录页面</h2>
    <form action="/mylogin" method="post">
        帐号: <input type="text" name="uname"><br>
        密码: <input type="password" name="upwd"><br>
        <input type="submit">
    </form>
</body>
</html>
const express=require('express');
let app=express();
app.listen(8088);

//获取登录网页路由: get  /login
app.get('/login',function(req,res){
    //响应文件
    res.sendFile(__dirname+'/login.html');
});

//解析post请求参数
app.use(express.urlencoded({
    extended:false //不使用qs模块
}));
app.use(express.json())

//根据表单的请求创建对应路由
//post  /mylogin
app.post('/mylogin',function(req,res){
    console.log(req.body);
    res.send('登录成功');
});

cors跨域

处理跨域

安装

npm install cors
var express = require('express');
const cors = require("cors");
var app = express();

app.use(cors({
    //[允许跨域访问服务器地址,多个地址用逗号隔开]
    origin: ['http://localhost:8081', 'http://127.0.0.1:8081', 'http://127.0.0.1:5500'],
    credentials: true
}))

var app = express();

// 所有服务器都可以跨域访问,方便调试
// app.use(cors());

express脚手架

安装

npm install -g express-generator

创建项目

express -e 项目名

安装所有依赖包

cd 项目名
npm install

启动项目

npm

第三方模块

mysql模块

基于NodeJS平台,快速、开放、极简的操作mysql数据库的模块

安装

npm install mysql

引入

const mysql=require('mysql');

操作

// mysql.createConnection()  创建普通连接对象
var connection=mysql.createConnection({
  host:'127.0.0.1', //数据地址
  port:'3306', //数据库端口
  user:'root', //用户名
  password:'', //密码
  database:'DBNAME' //进入的数据库
});
connection.connect(); // 执行连接
// connection.query() 执行SQL命令,会建立连接
var sqlstr = 要执行的sql语句
connection.query( sqlstr ,function( err,result ){
    if(err) throw err;   //err 报错
    console.log(result); //result 返回值
});

?占位符

在sql语句中数据部分通过?代替,在执行时以参数的形式传入,可以防止sql注入

connection.query( ' ...?,?,? ' , [ 1,2,3 ] , function( err,result ){
    if(err) throw err;   //err 报错
    console.log(result); //result 返回值
});
set
var emp = { ename : 'tom', sex : 1, salary : 1000 }
// ? 传入对象会被解析成 属性名=属性值,
// insert into emp set ename = 'tom', sex = 1, salary = 1000
connection.query('insert into emp set ?',[emp],(err,result)=>{
    if(err) throw err; 
    console.log(result);
});

连接池

// mysql.createPool()  创建连接池对象
var pool=mysql.createPool({
    host:'127.0.0.1',
    port:'3306',
    user:'root',
    password:'' ,
    database:'DBNAME',
    connectionLimit:20 //设置连接池大小,默认15
});
pool.query(); // 执行SQL命令,会建立连接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值