首頁 > web前端 > js教程 > 聊聊nodejs中的get/post請求和中間件

聊聊nodejs中的get/post請求和中間件

青灯夜游
發布: 2021-12-08 19:01:04
轉載
2151 人瀏覽過

這篇文章帶大家了解一下node.js中的熱重啟、get請求、post請求和中間件,希望對大家有幫助!

聊聊nodejs中的get/post請求和中間件

一、node熱重啟

#1.安裝

## npm i nodemon

2.運行啟動

nodemon .bin/www

##二、關於get請求

一般在網站開發中,get都用作資料獲取和查詢,類似於資料庫中的查詢操作,當伺服器解析前台資源後即傳輸對應內容;而查詢字串是在URL上進行的,形如:

http://localhost:8080/login?goods1=0001&goods2=0002

#取得前台get請求透過req.query可以取得使用者傳送的get請求,之後透過

node

操作將對應資料傳回給使用者。 如果發送的是:

http://localhost:8080/login?goods1=0001&goods2=0002


#回應的話則通過:
req.query
登入後複製

他會取得到全部數據,或

req.query.goods1
req.query.goods2
登入後複製

來單獨或去每一個數據。總之不同的需求對應不同的業務,大家按自己的需要來取得;

#實例下面透過一個實例來對取得get參數進行一個總結:

HTML:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <form action="http://localhost:8080/login" method="get">
            用户:
            <input type="text" name="user" id="user" placeholder="用户名"/>
            <br>
            密码:
            <input type="password" name="password" id="password" placeholder="密码"/>
            <br>
            <input type="submit" value="提交"/>
        </form>
    </body>
</html>
登入後複製

node:

const express = require("express");
var app = express();

app.get("/",function(req,res){
    res.send("主页");
});

app.get("/login",function(req,res){
    console.log(req.query);
    res.send("登录路由,user为:"+req.query.user+"==>   password为:"+req.query.password);
});

app.listen(8080);
登入後複製

三、關於POST請求

post方法作為http請求很重要的一部分,幾乎所有的網站都有用到它,與get不同,post請求更像是在伺服器上做修改操作,它一般用於資料資源的更新。相較於get請求,post所請求的資料會更加安全。上一章我們發現get請求會在網址列顯示輸入的使用者名稱和密碼(有中文時會轉換為BASE64加密),而post請求會在網址列顯示輸入的使用者名稱和密碼(有中文時會轉換為BASE64加密),而post請求會在網址列顯示輸入的包體中,這使得別人無法直接看到用戶名和密碼!

Express如何設定POST請求#1.首先我們得知道在form表單進行post請求,

enctype

屬性一般設定為“application/x-www-form-urlencoded”,如果設定成multipart/form-data,則多用於檔案上傳,如下:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">&lt;form action=&quot;#&quot; method=&quot;post&quot; enctype=&quot;application/x-www-form-urlencoded&quot;&gt; &lt;/form&gt;</pre><div class="contentsignin">登入後複製</div></div>2.設定解析body中間件

app.use(express.urlencoded())
登入後複製

3.取得body資料

req.body.username
登入後複製

#登陸案例:

##HTML:
<!DOCTYPE html>
<html>
<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>Document</title>
</head>
<body>
    <h1>登陆</h1>
    <form action="/login" method="POST">
        <div>
            用户名:<input type="text" name="username">
        </div>
        <div>
            密码:<input type="password" name="password">
        </div>
        <button>登陆</button>
    </form>
      
</body>
</html>
登入後複製

APP.JS

var express = require(&#39;express&#39;);
var path = require(&#39;path&#39;)
var app = express();
var sqlQuery = require(&#39;./lcMysql&#39;)

// view engine setup
app.set(&#39;views&#39;, path.join(__dirname, &#39;views&#39;));
app.set(&#39;view engine&#39;, &#39;ejs&#39;);
app.use(express.static(path.join(__dirname, &#39;public&#39;)));
//解析post提交的数据
app.use(express.urlencoded())

//搜索首页
app.get(&#39;/&#39;,(req,res)=>{
  res.render(&#39;index.ejs&#39;)
})

//登陆页
app.get(&#39;/login&#39;,(req,res)=>{
  res.render(&#39;login&#39;)
})
//处理登陆请求
app.post(&#39;/login&#39;,async (req,res)=>{
  //获取用户名和密码
  let username = req.body.username 
  let password = req.body.password
  //查询数据库是否由此用户名和密码
  let sqlStr = &#39;select * from user where username = ? and password = ?&#39;;
  let arr = [username,password];
  let result = await sqlQuery(sqlStr,arr)
  if(result.length == 0 ){
    res.send("登陆失败")
  }else{
    res.send("登陆成功")
  }

})


module.exports = app;
登入後複製

四、中間件

從字面意思,我們可以了解到它大概就是做中間代理操作,事實也是如此;大多數情況下,中間件就是在做接收到請求和發送回應中間的一系列操作。事實上,express是一個路由和中間件的web框架,Express 應用程式基本上是一系列中間件函數的呼叫。

1.瀏覽器傳送請求

2.express接受請求

中間處理的程序

#3.路由函數處理渲染(req,res)

4.res.render渲染

中間件函數可以執行下列任務:

執行任何程式碼。

    對請求和回應物件進行更改。
  • 結束請求/回應循環。
  • 呼叫堆疊中的下一個中間件函數。
  • 中間件也分為應用層中介軟體、路由中間件、內建中間件、錯誤處理中介軟體和第三方中間件。以下分別對以下進行說明:

1.應用層中間件應用層級中間鍵綁定到app物件使用app.use和app.METHOD()-需要處理http請求的方法,例如GET、PUT、POST,將先前的get或post替換為use就行。例如下面實例:
const express=require("express");

var app=express();

//匹配路由之前的操作
app.use(function(req,res,next()){
    console.log("访问之前");
});

app.get("/",function(req,res){
    res.send("主页");
});

app.listen(8080);
登入後複製

這時我們會發現

http://localhost:8080/

位址一直在加載,但命令列顯示了“訪問之前”,說明程式並不會同步執行,如果使用next來是路由繼續向下匹配,那麼就能又得到主頁資料了:

const express=require("express");

var app=express();

//匹配路由之前的操作
app.use(function(req,res,next){
    console.log("访问之前");
    next();
});

app.get("/",function(req,res){
    res.send("主页");
});

app.listen(8080);
登入後複製
當然也可以簡化寫法:
const express=require("express");

var app=express();

app.use(function(req,res,next){
    console.log("访问之前");
    next();
},function(req,res){
    res.send("主页");
});

app.listen(8080);
登入後複製

因此,在進行路由匹配之前或再錄又要繼續向下執行時想做個操作,那麼應用層中間件無疑是好的選擇。

2.路由中间件

路由级中间件和应用级中间件类似,只不过他需要绑定express.Router();

var router = express.Router()
登入後複製

在匹配路由时,我们使用 router.use() 或 router.VERB() ,路由中间件结合多次callback可用于用户登录及用户状态检测。

const express = require("express");
var app = express();
var router=express.Router();

router.use("/",function(req,res,next){
    console.log("匹配前");
    next();
});

router.use("/user",function(req,res,next){
    console.log("匹配地址:",req.originalUrl);
    next();
},function(req,res){
    res.send("用户登录");
});

app.use("/",router);

app.listen(8080);
登入後複製

总之在检测用户登录和引导用户应该访问哪个页面是,路由中间件绝对好用。

3.错误处理中间件

顾名思义,它是指当我们匹配不到路由时所执行的操作。错误处理中间件和其他中间件基本一样,只不过其需要开发者提供4个自变量参数。

app.use((err, req, res, next) => {
        res.sendStatus(err.httpStatusCode).json(err);
});
登入後複製

一般情况下,我们把错误处理放在最下面,这样我们即可对错误进行集中处理。

const express=require("express");

var app=express();

app.get("/",function(req,res,next){
    const err=new Error(&#39;Not Found&#39;);
    res.send("主页");
    next(err);
});

app.use("/user",function(err,req,res,next){
    console.log("用户登录");
    next(err);
},function(req,res,next){
    res.send("用户登录");
    next();
});

app.use(function(req,res){
    res.status(404).send("未找到指定页面");
});

app.listen(8080);
登入後複製

4.内置中间件

从版本4.x开始,Express不再依赖Content,也就是说Express以前的内置中间件作为单独模块,express.static是Express的唯一内置中间件。

express.static(root, [options]);
登入後複製

通过express.static我们可以指定要加载的静态资源。

5.第三方中间件

形如之前我们的body-parser,采用引入外部模块的方式来获得更多的应用操作。如后期的cookie和session。

var express = require(&#39;express&#39;);
var app = express();
var cookieParser = require(&#39;cookie-parser&#39;);
登入後複製

以上就是关于express中间件类型,在实际项目中,中间件都是必不可少的,因此熟悉使用各种中间件会加快项目的开发效率。

更多node相关知识,请访问:nodejs 教程!!

以上是聊聊nodejs中的get/post請求和中間件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:juejin.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板