聊聊nodejs中的get/post請求和中間件
這篇文章帶大家了解一下node.js中的熱重啟、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方法作為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:php;toolbar:false;'><form action="#" method="post" enctype="application/x-www-form-urlencoded">
</form></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<!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>
var express = require('express'); var path = require('path') var app = express(); var sqlQuery = require('./lcMysql') // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.use(express.static(path.join(__dirname, 'public'))); //解析post提交的数据 app.use(express.urlencoded()) //搜索首页 app.get('/',(req,res)=>{ res.render('index.ejs') }) //登陆页 app.get('/login',(req,res)=>{ res.render('login') }) //处理登陆请求 app.post('/login',async (req,res)=>{ //获取用户名和密码 let username = req.body.username let password = req.body.password //查询数据库是否由此用户名和密码 let sqlStr = 'select * from user where username = ? and password = ?'; 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);
登入後複製
這時我們會發現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('Not Found'); 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('express'); var app = express(); var cookieParser = require('cookie-parser');
以上就是关于express中间件类型,在实际项目中,中间件都是必不可少的,因此熟悉使用各种中间件会加快项目的开发效率。
更多node相关知识,请访问:nodejs 教程!!
以上是聊聊nodejs中的get/post請求和中間件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

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

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

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

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 適用於大型企業應用程式。

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

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