目錄
一、node熱重啟
#實例下面透過一個實例來對取得get參數進行一個總結:" >#實例下面透過一個實例來對取得get參數進行一個總結:
post方法作為http請求很重要的一部分,幾乎所有的網站都有用到它,與get不同,post請求更像是在伺服器上做修改操作,它一般用於資料資源的更新。相較於get請求,post所請求的資料會更加安全。上一章我們發現get請求會在網址列顯示輸入的使用者名稱和密碼(有中文時會轉換為BASE64加密),而post請求會在網址列顯示輸入的使用者名稱和密碼(有中文時會轉換為BASE64加密),而post請求會在網址列顯示輸入的包體中,這使得別人無法直接看到用戶名和密碼!
Express如何設定POST請求#1.首先我們得知道在form表單進行post請求," >Express如何設定POST請求#1.首先我們得知道在form表單進行post請求,
從字面意思,我們可以了解到它大概就是做中間代理操作,事實也是如此;大多數情況下,中間件就是在做接收到請求和發送回應中間的一系列操作。事實上,express是一個路由和中間件的web框架,Express 應用程式基本上是一系列中間件函數的呼叫。
2.路由中间件" >2.路由中间件
3.错误处理中间件" >3.错误处理中间件
4.内置中间件" >4.内置中间件
5.第三方中间件" >5.第三方中间件
首頁 web前端 js教程 聊聊nodejs中的get/post請求和中間件

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

Dec 08, 2021 pm 07:01 PM
nodejs 中介軟體

這篇文章帶大家了解一下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
登入後複製

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

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請求會在網址列顯示輸入的包體中,這使得別人無法直接看到用戶名和密碼!

enctype

屬性一般設定為“application/x-www-form-urlencoded”,如果設定成multipart/form-data,則多用於檔案上傳,如下:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;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);
登入後複製

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

路由级中间件和应用级中间件类似,只不过他需要绑定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);
登入後複製

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

顾名思义,它是指当我们匹配不到路由时所执行的操作。错误处理中间件和其他中间件基本一样,只不过其需要开发者提供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.x开始,Express不再依赖Content,也就是说Express以前的内置中间件作为单独模块,express.static是Express的唯一内置中间件。

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

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

形如之前我们的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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

nodejs是後端框架嗎 nodejs是後端框架嗎 Apr 21, 2024 am 05:09 AM

Node.js 可作為後端框架使用,因為它提供高效能、可擴展性、跨平台支援、豐富的生態系統和易於開發等功能。

nodejs怎麼連接mysql資料庫 nodejs怎麼連接mysql資料庫 Apr 21, 2024 am 06:13 AM

要連接 MySQL 資料庫,需要遵循以下步驟:安裝 mysql2 驅動程式。使用 mysql2.createConnection() 建立連接對象,其中包含主機位址、連接埠、使用者名稱、密碼和資料庫名稱。使用 connection.query() 執行查詢。最後使用 connection.end() 結束連線。

nodejs安裝目錄裡的npm與npm.cmd檔有什麼差別 nodejs安裝目錄裡的npm與npm.cmd檔有什麼差別 Apr 21, 2024 am 05:18 AM

Node.js 安裝目錄中有兩個與 npm 相關的文件:npm 和 npm.cmd,區別如下:擴展名不同:npm 是可執行文件,npm.cmd 是命令視窗快捷方式。 Windows 使用者:npm.cmd 可以在命令提示字元中使用,npm 只能從命令列執行。相容性:npm.cmd 特定於 Windows 系統,npm 跨平台可用。使用建議:Windows 使用者使用 npm.cmd,其他作業系統使用 npm。

nodejs中的全域變數有哪些 nodejs中的全域變數有哪些 Apr 21, 2024 am 04:54 AM

Node.js 中存在以下全域變數:全域物件:global核心模組:process、console、require執行階段環境變數:__dirname、__filename、__line、__column常數:undefined、null、NaN、Infinity、-Infinity

nodejs和java的差別大嗎 nodejs和java的差別大嗎 Apr 21, 2024 am 06:12 AM

Node.js 和 Java 的主要差異在於設計和特性:事件驅動與執行緒驅動:Node.js 基於事件驅動,Java 基於執行緒驅動。單執行緒與多執行緒:Node.js 使用單執行緒事件循環,Java 使用多執行緒架構。執行時間環境:Node.js 在 V8 JavaScript 引擎上運行,而 Java 在 JVM 上運行。語法:Node.js 使用 JavaScript 語法,而 Java 使用 Java 語法。用途:Node.js 適用於 I/O 密集型任務,而 Java 適用於大型企業應用程式。

nodejs是後端開發語言嗎 nodejs是後端開發語言嗎 Apr 21, 2024 am 05:09 AM

是的,Node.js 是一種後端開發語言。它用於後端開發,包括處理伺服器端業務邏輯、管理資料庫連接和提供 API。

nodejs專案怎麼部署到伺服器 nodejs專案怎麼部署到伺服器 Apr 21, 2024 am 04:40 AM

Node.js 專案的伺服器部署步驟:準備部署環境:取得伺服器存取權限、安裝 Node.js、設定 Git 儲存庫。建置應用程式:使用 npm run build 產生可部署程式碼和相依性。上傳程式碼到伺服器:透過 Git 或檔案傳輸協定。安裝依賴項:SSH 登入伺服器並使用 npm install 安裝應用程式相依性。啟動應用程式:使用 node index.js 等命令啟動應用程序,或使用 pm2 等進程管理器。設定反向代理(可選):使用 Nginx 或 Apache 等反向代理路由流量到應用程式

nodejs和java選哪個 nodejs和java選哪個 Apr 21, 2024 am 04:40 AM

Node.js 和 Java 在 Web 開發中各有優劣,因此選擇取決於專案需求。 Node.js 擅長即時應用程式、快速開發和微服務架構,而 Java 則在企業級支援、效能和安全性方面佔優。

See all articles