成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

使用Express搭建一個(gè)簡(jiǎn)單的服務(wù)器

gghyoo / 946人閱讀

摘要:框架應(yīng)用程序是一個(gè)保持最小規(guī)模的靈活的應(yīng)用程序開(kāi)發(fā)框架,為和移動(dòng)應(yīng)用程序提供一組強(qiáng)大的功能。路由基本使用下載新建一個(gè)文件,然后輸入然后運(yùn)行打開(kāi)就出現(xiàn)請(qǐng)求和響應(yīng)應(yīng)用使用回調(diào)函數(shù)的參數(shù)和對(duì)象來(lái)處理請(qǐng)求和響應(yīng)的數(shù)據(jù)。

Express框架 Web 應(yīng)用程序

Express 是一個(gè)保持最小規(guī)模的靈活的 Node.js Web 應(yīng)用程序開(kāi)發(fā)框架,為 Web 和移動(dòng)應(yīng)用程序提供一組強(qiáng)大的功能。

API

使用您所選擇的各種 HTTP 實(shí)用工具和中間件,快速方便地創(chuàng)建強(qiáng)大的 API。

性能

Express 提供精簡(jiǎn)的基本 Web 應(yīng)用程序功能,而不會(huì)隱藏您了解和青睞的 Node.js 功能。

Express-路由基本使用

下載: npm install express --save

Hello world

新建一個(gè)server.js文件,然后輸入:

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

app.get("/", (req, res)=>{
    req.send("Hello world");
});
app.listen(8083, ()=>{
    console.log("Server is running at http://localhost:8083")
})

然后運(yùn)行: node server.js
打開(kāi):http://localhost:8083/
就出現(xiàn):

請(qǐng)求和響應(yīng)

Express 應(yīng)用使用回調(diào)函數(shù)的參數(shù): request 和 response 對(duì)象來(lái)處理請(qǐng)求和響應(yīng)的數(shù)據(jù)。

app.get("/", function (request, response) {
   // --
})

request 和 response 對(duì)象的具體介紹:

Request 對(duì)象
request 對(duì)象表示 HTTP 請(qǐng)求,包含了請(qǐng)求查詢(xún)字符串,參數(shù),內(nèi)容,HTTP 頭部等屬性。常見(jiàn)屬性有:

req.app:當(dāng)callback為外部文件時(shí),用req.app訪問(wèn)express的實(shí)例
req.baseUrl:獲取路由當(dāng)前安裝的URL路徑
req.body / req.cookies:獲得「請(qǐng)求主體」/ Cookies
req.fresh / req.stale:判斷請(qǐng)求是否還「新鮮」
req.hostname / req.ip:獲取主機(jī)名和IP地址
req.originalUrl:獲取原始請(qǐng)求URL
req.params:獲取路由的parameters
req.path:獲取請(qǐng)求路徑
req.protocol:獲取協(xié)議類(lèi)型
req.query:獲取URL的查詢(xún)參數(shù)串
req.route:獲取當(dāng)前匹配的路由
req.subdomains:獲取子域名
req.accepts():檢查可接受的請(qǐng)求的文檔類(lèi)型
req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages:返回指定字符集的第一個(gè)可接受字符編碼
req.get():獲取指定的HTTP請(qǐng)求頭
req.is():判斷請(qǐng)求頭Content-Type的MIME類(lèi)型

Response 對(duì)象
response 對(duì)象表示 HTTP 響應(yīng),即在接收到請(qǐng)求時(shí)向客戶(hù)端發(fā)送的 HTTP 響應(yīng)數(shù)據(jù)。常見(jiàn)屬性有:

res.app:同req.app一樣
res.append():追加指定HTTP頭
res.set()在res.append()后將重置之前設(shè)置的頭
res.cookie(name,value [,option]):設(shè)置Cookie
opition: domain / expires / httpOnly / maxAge / path / secure / signed
res.clearCookie():清除Cookie
res.download():傳送指定路徑的文件
res.get():返回指定的HTTP頭
res.json():傳送JSON響應(yīng)
res.jsonp():傳送JSONP響應(yīng)
res.location():只設(shè)置響應(yīng)的Location HTTP頭,不設(shè)置狀態(tài)碼或者close response
res.redirect():設(shè)置響應(yīng)的Location HTTP頭,并且設(shè)置狀態(tài)碼302
res.render(view,[locals],callback):渲染一個(gè)view,同時(shí)向callback傳遞渲染后的字符串,如果在渲染過(guò)程中有錯(cuò)誤發(fā)生next(err)將會(huì)被自動(dòng)調(diào)用。callback將會(huì)被傳入一個(gè)可能發(fā)生的錯(cuò)誤以及渲染后的頁(yè)面,這樣就不會(huì)自動(dòng)輸出了。
res.send():傳送HTTP響應(yīng)
res.sendFile(path [,options] [,fn]):傳送指定路徑的文件 -會(huì)自動(dòng)根據(jù)文件extension設(shè)定Content-Type
res.set():設(shè)置HTTP頭,傳入object可以一次設(shè)置多個(gè)頭
res.status():設(shè)置HTTP狀態(tài)碼
res.type():設(shè)置Content-Type的MIME類(lèi)型

Express-路由
我們已經(jīng)了解了 HTTP 請(qǐng)求的基本應(yīng)用,而路由決定了由誰(shuí)(指定腳本)去響應(yīng)客戶(hù)端請(qǐng)求。
在HTTP請(qǐng)求中,我們可以通過(guò)路由提取出請(qǐng)求的URL以及GET/POST參數(shù)。

路由的基本形式:
app.METHOD(PATH, HANDLER)

app 表示的是一個(gè)Express的實(shí)例

METHOD 是http請(qǐng)求的方法(get, psot..)

PATH 服務(wù)器上的路徑

HANDLER 請(qǐng)求之后的執(zhí)行函數(shù)

下面的示例說(shuō)明了如何定義路由:

// 對(duì)/news 頁(yè)面進(jìn)行g(shù)et請(qǐng)求
app.get("news", (req, res)=>{
    res.send("Hello news");
});
// 對(duì)/about 頁(yè)面進(jìn)行post請(qǐng)求
app.post("about", (req, res)=>{
    res.send("Hello about");
});
// 對(duì)/list* 可匹配 /list+任意字符
app.get("/list*", (req, res)=>{
    res.send("Hello list pages");
})

然后運(yùn)行:node server.js
打開(kāi):http://localhost:8083/


Express-搭建靜態(tài)資源庫(kù)
Express 提供了內(nèi)置的中間件 express.static 來(lái)設(shè)置靜態(tài)文件如:圖片, CSS, JavaScript 等。

你可以使用 express.static 中間件來(lái)設(shè)置靜態(tài)文件路徑。例如,如果你將圖片, CSS, JavaScript 文件放在 public 目錄下,你可以這么寫(xiě):
app.use(express.static("public"));

現(xiàn)在,你就可以訪問(wèn) public 目錄中的所有文件了:

public/index.html
public/images
public/images/bg.jpeg
public/css
...

如果要使用多個(gè)靜態(tài)資源目錄,請(qǐng)多次調(diào)用 express.static 中間件函數(shù):

app.use(express.static("public"))
app.use(express.static("files"))

Express 在靜態(tài)目錄查找文件,因此,存放靜態(tài)文件的目錄名不會(huì)出現(xiàn)在 URL 中。
但是您可以給靜態(tài)目錄添加一個(gè)路由:
app.use("/static", express.static(path.join(__dirname, "public")))
設(shè)置/static/public目錄的路由。
現(xiàn)在,你就可以通過(guò)帶有 /static 前綴地址來(lái)訪問(wèn) public 目錄中的文件了。

http://localhost:8083/static/css
http://localhost:8083/static/css/index.css
http://localhost:8083/static/image
http://localhost:8083/static/images/bg.jpeg
http://localhost:8083/static/index.html

為了安全,最好使用絕對(duì)路由:
app.use("/static", express.static(path.join(__dirname, "public")))
然后運(yùn)行:node server.js
打開(kāi):http://localhost:8083/static
就可以訪問(wèn)public下的所有文件,如圖:

Express-模板引擎之EJS
EJS 是一套簡(jiǎn)單的模板語(yǔ)言,幫你利用普通的 JavaScript 代碼生成 HTML 頁(yè)面。

下載Ejs: npm install ejs --save
同目錄下新建myejs.js:

const express= require("express");
const app = express();
//設(shè)置模板文件的目錄,并且新建一個(gè)viwes的目錄
app.set("views", "./views");
//注冊(cè)模板引擎
app.set("view engine", "ejs");
//使用res.render()來(lái)渲染一個(gè)視圖并將呈現(xiàn)的HTML字符串發(fā)送給客戶(hù)端;
app.get("/", function(req, res,) {
    res.render("index", { title: "測(cè)試" });
});
//監(jiān)聽(tīng)8083端口
app.listen(8083, ()=>{
    console.log("Server is running at http://localhost:8083")
})

在新建views目錄中新建index.ejs:

 

<%= title %>

然后運(yùn)行:node myejs.js
打開(kāi):http://localhost:8083
即可看到:

當(dāng)然,也可以返回一個(gè)json文件來(lái)渲染視圖:
在同目錄下新建一個(gè)data.json:

{
    "list": [
    { "name":"小明" , "age":"6", "sex": "男"},
    { "name":"小紅" , "age":"4" ,"sex": "女"},
    { "name":"小亮" , "age":"5" ,"sex": "男"}
    ],
    "source":"神奇二班"
}

然后更改myejs.js:

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

//設(shè)置模板文件的目錄,并且新建一個(gè)viwes的目錄
app.set("views", "./views");
//注冊(cè)模板引擎
app.set("view engine", "ejs");
//使用res.render()來(lái)渲染一個(gè)視圖并將呈現(xiàn)的HTML字符串發(fā)送給客戶(hù)端;
app.get("/", function(req, res,) {
    getDataJson((dataJson)=>{
        console.log(dataJson);
        res.render("index", dataJson);
    })
});
//訪問(wèn)data.json 拿到數(shù)據(jù)解析并返回
const getDataJson=(callBack)=>{
    fs.readFile("./data.json", (err, data)=>{
        if(!err){
            let jsonData= JSON.parse(data);
            callBack(jsonData);
        }else{
            throw err;
        }
    })
}
//監(jiān)聽(tīng)8083端口
app.listen(8083, ()=>{
    console.log("Server is running at http://localhost:8083")
})

然后更改index.ejs:

<%=source %>

    <% for(var i=0; i
  • <%= list[i].name %> | <%= list[i].age %> | <%= list[i].sex %>
  • <% } %>

然后在運(yùn)行:
然后運(yùn)行:node myejs.js
打開(kāi):http://localhost:8083

參考:
GitHub源碼
Express官方文檔
EJS 模板引擎

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100704.html

相關(guān)文章

  • 使用express搭建一個(gè)簡(jiǎn)單查詢(xún)務(wù)器

    摘要:嘗試使用調(diào)試程序,實(shí)現(xiàn)個(gè)人更習(xí)慣使用來(lái)調(diào)試客戶(hù)端使用調(diào)取接口的時(shí)候要區(qū)分的區(qū)別參數(shù)放在不設(shè)置或者參數(shù)放在 使用到的技術(shù)棧有express、mysql.項(xiàng)目結(jié)構(gòu): service --node_modules --app.js --query.js app.js支持調(diào)用服務(wù),使用body-parser對(duì)request進(jìn)行處理.query.js實(shí)現(xiàn)鏈接數(shù)據(jù)庫(kù)以及查詢(xún)數(shù)據(jù)庫(kù)的功能.app.j...

    Vixb 評(píng)論0 收藏0
  • 【實(shí)戰(zhàn)】用 express+MongoDB 搭建一個(gè)完整前端項(xiàng)目

    摘要:前言要做一個(gè)全沾的工程師,對(duì)于后端和數(shù)據(jù)庫(kù)來(lái)說(shuō),即使不認(rèn)識(shí)也要見(jiàn)個(gè)面的?;玖私獾母拍罹秃茫饕前惭b上數(shù)據(jù)庫(kù),并進(jìn)行簡(jiǎn)單的增刪操作。 前言:要做一個(gè)全沾的工程師,對(duì)于后端和數(shù)據(jù)庫(kù)來(lái)說(shuō),即使不認(rèn)識(shí)也要見(jiàn)個(gè)面的。本文給的例子很簡(jiǎn)單,也貼出來(lái)源碼,只要一步步下來(lái),就可以跑起來(lái)啦~~~ 思考一個(gè)需求:做一個(gè)登錄頁(yè)面,自己搭建服務(wù)和數(shù)據(jù)庫(kù),將用戶(hù)輸入的登錄信息保存到數(shù)據(jù)庫(kù)如何完成呢:首先選擇...

    Steve_Wang_ 評(píng)論0 收藏0
  • express+nginx 搭建簡(jiǎn)單web項(xiàng)目

    摘要:但是之前是直接用本地去執(zhí)行代碼,代碼執(zhí)行后無(wú)法改變其狀態(tài),于是打算用和來(lái)做一個(gè)簡(jiǎn)單的站點(diǎn)去執(zhí)行操作。代碼邏輯整個(gè)邏輯很簡(jiǎn)單,一個(gè)簡(jiǎn)單的前端頁(yè)面,提供表單來(lái)發(fā)送請(qǐng)求修改發(fā)送的消息,服務(wù)端使用文件來(lái)保存消息,在需要發(fā)送消息的時(shí)候讀取消息。 背景 之前寫(xiě)了一個(gè)釘釘機(jī)器人定時(shí)發(fā)消息的應(yīng)用,感覺(jué)還有許多可以補(bǔ)充優(yōu)化的地方,比如可以修改發(fā)送的消息內(nèi)容,也可以啟動(dòng)或者停止定時(shí)發(fā)送消息。 但是之前是直...

    kbyyd24 評(píng)論0 收藏0
  • Express 搭建務(wù)器

    摘要:指定需要處理的路由回調(diào)函數(shù),即請(qǐng)求此路由的處理函數(shù),它可以接收兩個(gè)參數(shù)三個(gè)參數(shù),四個(gè)參數(shù)。如果匹配到自定義的路由,立即執(zhí)行回調(diào)函數(shù),如果處理函數(shù)中沒(méi)有則不再往下執(zhí)行,如果執(zhí)行了會(huì)繼續(xù)向下匹配。 簡(jiǎn)介 Node.js? is a JavaScript runtime built on Chromes V8 JavaScript engine. Node.js uses an event-...

    CrazyCodes 評(píng)論0 收藏0
  • 手把手用 express 搭建后臺(tái)

    摘要:文件這個(gè)是項(xiàng)目的入口文件,這邊有著項(xiàng)目的一下配置,也在此整合了項(xiàng)目的模塊,其中要注意的就是里面關(guān)于路由模塊的配置了。后面要再想加其他路由模塊的時(shí)候,就按照上面先引入路由模塊,再用設(shè)置好地址,后面就可以用了。 前言 想必很多小伙伴開(kāi)始學(xué) node 的時(shí)候想搞個(gè)項(xiàng)目出來(lái)卻不知道怎么下手吧,這個(gè)教程的話就是教大家用 express 框架簡(jiǎn)單粗暴搭建一個(gè)可以用的后臺(tái)出來(lái),然后關(guān)于 node 和...

    Render 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<