express項(xiàng)目文件目錄說明以及功能描述詳解
app.js:?jiǎn)?dòng)文件,或者說入口文件
package.json:存儲(chǔ)著工程的信息及模塊依賴,當(dāng)在 dependencies 中添加依賴的模塊時(shí),運(yùn)行 npm install,npm 會(huì)檢查當(dāng)前目錄下的 package.json,并自動(dòng)安裝所有指定的模塊
node_modules:存放 package.json 中安裝的模塊,當(dāng)你在 package.json 添加依賴的模塊并安裝后,存放在這個(gè)文件夾下
public:存放 image、css、js 等文件
routes:存放路由文件
views:存放視圖文件或者說模版文件
bin:存放可執(zhí)行文件
打開app.js,讓我們看看里面究竟有什么:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var users = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
這里我們通過require()加載了express、path 等模塊,以及 routes 文件夾下的index. js和 users.js 路由文件。 下面來講解每行代碼的含義。
(1) var app = express():生成一個(gè)express實(shí)例 app。
(2)app.set('views', path.join(__dirname, 'views')):設(shè)置 views 文件夾為存放視圖文件的目錄, 即存放模板文件的地方,__dirname 為全局變量,存儲(chǔ)當(dāng)前正在執(zhí)行的腳本所在的目錄。
(3)app.set('view engine', 'ejs'):設(shè)置視圖模板引擎為 ejs。
(4)app.use(favicon(__dirname + '/public/favicon.ico')):設(shè)置/public/favicon.ico為favicon圖標(biāo)。
(5)app.use(logger('dev')):加載日志中間件。
(6)app.use(bodyParser.json()):加載解析json的中間件。
(7)app.use(bodyParser.urlencoded({ extended: false })):加載解析urlencoded請(qǐng)求體的中間件。
(8)app.use(cookieParser()):加載解析cookie的中間件。
(9)app.use(express.static(path.join(__dirname, 'public'))):設(shè)置public文件夾為存放靜態(tài)文件的目錄。
(10)app.use('/', routes);和app.use('/users', users):路由控制器。
(11)
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
捕獲404錯(cuò)誤,并轉(zhuǎn)發(fā)到錯(cuò)誤處理器。
(12)
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
開發(fā)環(huán)境下的錯(cuò)誤處理器,將錯(cuò)誤信息渲染error模版并顯示到瀏覽器中。
(13)
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
生產(chǎn)環(huán)境下的錯(cuò)誤處理器,不會(huì)將錯(cuò)誤信息泄露給用戶。
(14)module.exports = app :導(dǎo)出app實(shí)例供其他模塊調(diào)用。
我們?cè)倏?bin/www 文件:
#!/usr/bin/env node
var debug = require('debug')('blog');
var app = require('../app');
app.set('port', process.env.PORT || 3000);
var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
});
(1)#!/usr/bin/env node:表明是 node 可執(zhí)行文件。
(2)var debug = require('debug')('blog'):引入debug模塊,打印調(diào)試日志。
(3)var app = require('../app'):引入我們上面導(dǎo)出的app實(shí)例。
(4)app.set('port', process.env.PORT || 3000):設(shè)置端口號(hào)。
(5)
var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
});
啟動(dòng)工程并監(jiān)聽3000端口,成功后打印 Express server listening on port 3000。
我們?cè)倏?routes/index.js 文件:
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res) {
res.render('index', { title: 'Express' });
});
module.exports = router;
生成一個(gè)路由實(shí)例用來捕獲訪問主頁的GET請(qǐng)求,導(dǎo)出這個(gè)路由并在app.js中通過app.use('/', routes); 加載。這樣,當(dāng)訪問主頁時(shí),就會(huì)調(diào)用res.render('index', { title: 'Express' });渲染views/index.ejs模版并顯示到瀏覽器中。
我們?cè)倏纯?views/index.ejs 文件:
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
</body>
</html>
在渲染模板時(shí)我們傳入了一個(gè)變量 title 值為 express 字符串,模板引擎會(huì)將所有 <%= title %> 替換為 express ,然后將渲染后生成的html顯示到瀏覽器中,如上圖所示。
在這一小節(jié)我們學(xué)習(xí)了如何創(chuàng)建一個(gè)工程并啟動(dòng)它,了解了工程的大體結(jié)構(gòu)和運(yùn)作流程,下一小節(jié)我們將學(xué)習(xí) express 的基本使用及路由控制。
總結(jié)
到此這篇關(guān)于express項(xiàng)目文件目錄說明以及功能描述的文章就介紹到這了,更多相關(guān)express項(xiàng)目文件目錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解nodejs中express搭建權(quán)限管理系統(tǒng)
本篇文章主要介紹了詳解express搭建權(quán)限管理系統(tǒng),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
nodejs使用http模塊發(fā)送get與post請(qǐng)求的方法示例
這篇文章主要介紹了nodejs使用http模塊發(fā)送get與post請(qǐng)求的方法,結(jié)合實(shí)例形式分析了nodejs基于http模塊實(shí)現(xiàn)發(fā)送get與post請(qǐng)求具體操作技巧,需要的朋友可以參考下2018-01-01
Nodejs 中的 Buffer 類的創(chuàng)建與基本使用
這篇文章主要為大家介紹了Nodejs中Buffer的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
node.js+Ajax實(shí)現(xiàn)獲取HTTP服務(wù)器返回?cái)?shù)據(jù)
這篇文章主要介紹了node.js+Ajax實(shí)現(xiàn)獲取HTTP服務(wù)器返回?cái)?shù)據(jù),講解的十分詳細(xì),也給出了很多的實(shí)例,是篇非常不錯(cuò)的文章,這里推薦給大家。2014-11-11
Node.js中的Buffer對(duì)象及創(chuàng)建方式
node.js提供了一個(gè)Buffer對(duì)象來提供對(duì)二進(jìn)制數(shù)據(jù)的操作,Buffer?類的實(shí)例類似于整數(shù)數(shù)組,但?Buffer?的大小是固定的、且在?V8?堆外分配物理內(nèi)存。本文給大家介紹Node.js中的Buffer對(duì)象及創(chuàng)建方式,感興趣的朋友一起看看吧2022-01-01
Node.js使用NodeMailer發(fā)送郵件實(shí)例代碼
本篇文章主要介紹了Node.js使用NodeMailer發(fā)送郵件實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-03-03
node.js使用zlib模塊進(jìn)行數(shù)據(jù)壓縮和解壓操作示例
這篇文章主要介紹了node.js使用zlib模塊進(jìn)行數(shù)據(jù)壓縮和解壓操作,結(jié)合實(shí)例形式詳細(xì)分析了node.js基于zlib模塊創(chuàng)建數(shù)據(jù)流以及壓縮和解壓縮等相關(guān)操作技巧,需要的朋友可以參考下2020-02-02
淺談Node新版本13.2.0正式支持ES Modules特性
這篇文章主要介紹了淺談Node新版本13.2.0正式支持ES Modules特性,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11

