詳解如何使用node.js的開發(fā)框架express創(chuàng)建一個web應(yīng)用
搭建環(huán)境
1.安裝Express
按鍵:Windows+R=>輸入cmd,打開命令行,輸入
npm install -g express@3
我們需要用全局模式安裝Express,因為只有這樣,我們才能在命令行中使用它
注意:這里我只選用Express 3.x版本,要是你對Express3x版本熟悉了的話,你只需看一下Migrating from 3.x to 4.x 的文檔即可過渡到Express 4.x
2.新建一個工程
繼續(xù)打開命令行,輸入
express -e murenziwei
注意:Express 3.x中使用ejs時不再是-t ejs,而是-e,可以輸入express -h查看
繼續(xù)輸入:(路徑切換到文件夾murenziwei)
cd murenziwei
繼續(xù)輸入:(安裝所需模塊)
npm install
如圖所示
安裝成功后輸入:
node app
在瀏覽器上訪問ocalhost:3000,如圖以下:
3.項目結(jié)構(gòu)
我們回頭看看生成的項目目錄里面都有什么,打開我們的murenziwei文件夾,如圖
- node_modules:存放package.json中安裝的模塊,當(dāng)你在package.json中添加依賴的模塊并安裝后,該模塊會存放在這個文件夾
- public:存放圖片/樣式/腳本等文件
- routes:存放路由文件
- views:存放視圖文件,或者說是模板文件
- app.js:啟動文件,或者說入口文件
- package.json:存儲項目的信息及模塊依賴,當(dāng)在dependencies中添加依賴的模塊時,運(yùn)行npm install,npm會檢查當(dāng)前目錄下的package.json,并自動安裝所有指定的模塊
- package-lock.json:記錄整個node_modules文件夾的樹狀結(jié)構(gòu),加快安裝模塊的速度
讓我們來看一看,打開app.js,究竟是什么代碼組成?
/* Module dependencies. */ var express = require('express'); var routes = require('./routes'); var user = require('./routes/user'); var http = require('http'); var path = require('path'); var app = express(); // all environments app.set('port', process.env.PORT || 3000); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.json()); app.use(express.urlencoded()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } app.get('/', routes.index); app.get('/users', user.list); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); });
這里我們通過require()加載了express,http,path模塊,還有routes文件夾下的index.js和user.js
1.app.set('port', process.env.PORT || 3000):設(shè)置端口為process.env.PORT或者3000;
2.app.set('views', path.join(__dirname, 'views')):設(shè)置views文件夾為存放視圖文件的目錄,即存放模板文件的地方,__dirname為全局變量,存儲當(dāng)前正在執(zhí)行的js所在的目錄;
3.app.set('view engine','ejs'):設(shè)置視圖模塊引擎為ejs
4.app.use(express.favicon()):connect內(nèi)建的中間件,使用默認(rèn)的favicon圖標(biāo),如果想使用自己的圖標(biāo),需改為app.use(express.favicon(__dirname+"/public/images/favicon.ico")),這里我們把自定義的favicon.icon放到/public/images文件夾下
5.app.use(express.logger('dev')):connect內(nèi)建的中間件,在開發(fā)環(huán)境下使用,在終端顯示簡單的日志,例如在啟動app.js后訪問localhost:3000,終端會輸出:
如果沒有這一行代碼,不管你怎么刷新頁面,終端都只有一行Express sever listening on port 3000
6.app.use(express.json());
app.use(urlencoded());
用來解析請求體,支持application/json,application/x-www-form-urlencoded
7.app.use(express.methodOverride()):connect內(nèi)建的中間件,可以協(xié)助處理POST請求,偽裝成 PUT,DELETE和其它HTTP方法
8.app.use(app.router):調(diào)用路由解析的規(guī)則
9.app.use(express.static(path.join(__dirname, 'public'))):connect內(nèi)創(chuàng)建的中間件,將根目錄下的public文件夾設(shè)置為存放images,css,js等靜態(tài)文件的目錄
if ('development' == app.get('env')) { app.use(express.errorHandler()); }
此段代碼可理解為:配置開發(fā)環(huán)境下的錯誤處理,輸出錯誤信息
10.app.get('/', routes.index):路由控制器,如果用戶訪問/(主頁),則由routes.index來處理,routes/index.js的內(nèi)容如下:
exports.index = function(req, res){ res.render('index', { title: 'Express' }); };
通過exports.index導(dǎo)出index函數(shù)接口,app.get('/',routes.index)相當(dāng)于:
app.get("/",function(res,rep){ res.render("index",{title:"Express"}); })
解釋一下上行的res.render("index",{title:"Express"}):使用ejs模板引擎解析views/index.ejs(因為我們之前通過app.set("views",__dirname+"/views")設(shè)置了模板文件默認(rèn)存儲在views文件夾下),并傳入一個對象,這個對象只有一個title屬新,它的值為字符串Express,即用字符串Express替換views/index.ejs中所有的title變量,這就是我們所說的渲染視圖,或者說渲染模板。
11.
http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); });
這段代碼可以這樣理解:創(chuàng)建http服務(wù)器并監(jiān)聽3000端口,創(chuàng)建成功后,終端顯示如下
然后我們就可以在瀏覽器中訪問localhost:3000了
最后總結(jié)一下我所講的知識點(diǎn):如何創(chuàng)建一個node項目并啟動它,了解了項目的大體結(jié)構(gòu)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解node.js創(chuàng)建一個web服務(wù)器(Server)的詳細(xì)步驟
- Node.js web 應(yīng)用如何封裝到Docker容器中
- node.js 使用 net 模塊模擬 websocket 握手進(jìn)行數(shù)據(jù)傳遞操作示例
- 在Node.js中將SVG圖像轉(zhuǎn)換為PNG,JPEG,TIFF,WEBP和HEIF格式的方法
- no-vnc和node.js實現(xiàn)web遠(yuǎn)程桌面的完整步驟
- node.js ws模塊搭建websocket服務(wù)端的方法示例
- node.js中ws模塊創(chuàng)建服務(wù)端和客戶端,網(wǎng)頁WebSocket客戶端
- Node.js原生api搭建web服務(wù)器的方法步驟
- 使用NODE.JS創(chuàng)建一個WEBSERVER(服務(wù)器)的步驟
相關(guān)文章
通過Nodejs搭建網(wǎng)站簡單實現(xiàn)注冊登錄流程
這篇文章主要介紹了通過Nodejs搭建網(wǎng)站簡單實現(xiàn)注冊登錄流程,Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境。 Node.js 使用了一個事件驅(qū)動、非阻塞式 I/O 的模型,使其輕量又高效。,需要的朋友可以參考下2019-06-06我的Node.js學(xué)習(xí)之路(二)NPM模塊管理
npm 是 Node.js 的模塊依賴管理工具。作為開發(fā)者使用的工具,主要解決開發(fā) Node.js 時會遇到的問題。如同 RubyGems 對于 Ruby 開發(fā)者和 Maven 對于 Java 開發(fā)者的重要性,npm 對與 Node.js 的開發(fā)者和社區(qū)的重要性不言而喻。2014-07-07用純Node.JS彈出Windows系統(tǒng)消息提示框?qū)嵗?MessageBox)
這篇文章主要介紹了用純Node.JS彈出Windows系統(tǒng)消息提示框?qū)嵗?MessageBox),非常具有實用價值,需要的朋友可以參考下2017-05-05Windows下快速搭建NodeJS本地服務(wù)器的步驟
本篇文章主要介紹了Windows下快速搭建NodeJS本地服務(wù)器的步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-08-08