從零開始學習Node.js系列教程之基于connect和express框架的多頁面實現(xiàn)數(shù)學運算示例
本文實例講述了Node.js基于connect和express框架的多頁面實現(xiàn)數(shù)學運算。分享給大家供大家參考,具體如下:
1、使用connect框架
.use方法用于綁定中間件到connect服務器,它會配置一系列在接到請求時調用的中間件模塊,此例中我們要配置的中間件有favicon logger static router
app.get/post/put 寫法:app.requestName('path', function(req, res, next){});
app-connect.js
var connect = require('connect'); //npm install connect
connect.createServer()
.use(connect.favicon())
.use(conect.logger())
.use('/filez', connect.static(__dirname + '/filez'))
.use(connect.router(function(app){
app.get('/', require('./home-node').get);
//一個URL字符串和兩個函數(shù)類型的參數(shù)
//路由器配置函數(shù)可以包含不限數(shù)量的函數(shù),你可以為自己的應用構造一個處理函數(shù)的隊列
app.get('/square', htutil.loadParams, require('./square-node').get);
app.get('/factorial', htutil.loadParams, require('./factorial-node').get);
app.get('/fibonacci', htutil.loadParams, require('./fibo2-node').get);
app.get('/mult', htutil.loadParams, require('./mult-node').get);
})).listen(3000);
console.log('listening to http://localhost:3000');
2、使用express框架
Express框架是一個基于connect(一個中間件框架)的web應用框架
Express專注于構建一個應用,包括提供一個模板系統(tǒng);connect專注于做web服務的基礎設施
安裝Express和EJS(模塊處理系統(tǒng)) npm install express ejs
app-express.js
var htutil = require('./htutil');
var math = require('./math');
var express = require('express');
//var app = express.createServer(express.logger()); //express 2.X
var app = express(); //express 3.X
//可選,因為Express下默認為CWD/views
app.set('views', __dirname + '/views');
app.engine('.html', require('ejs').__express);
app.set('view engine', 'ejs');
app.configure(function(){
app.use(app.router);
app.use(express.static(__dirname + '/filez'));
//默認的錯誤處理函數(shù),顯示棧軌跡
//如果要顯示用戶友好的錯誤,app.err(function(err, req, res, next){
// res.send(error page); //or res.render('template');
// });
app.use(express.errorHandler({
dumpExceptions: true, showStack: true
}));
/*
改成下面的話,瀏覽器會顯示一個簡單的消息-Internal Server Error內(nèi)部服務器錯誤
app.use(express.errorHandler({
dumpExceptions: true
}));
*/
});
//以上配置了必需的中間件,因為這里展示的配置項對應的是模板系統(tǒng)的配置,所有.html文件會由EJS引擎處理
//以下是路由器配置
app.get('/', function(req, res){
res.render('home.html', {title: "Math Wizard"});
});
app.get('/mult', htutil.loadParams, function(req, res){
if (req.a && req.b) req.result = req.a * req.b;
res.render('mult.html', {title: "Math Wizard", req: req});
});
app.get('/square', htutil.loadParams, function(req, res){
if (req.a) req.result = req.a * req.a;
res.render('square.html', {title: "Math Wizard", req: req});
});
app.get('/fibonacci', htutil.loadParams, function(req, res){
if (req.a){
math.fibonacciAsync(Math.floor(req.a), function(val){
req.result = val;
res.render('fibo.html', {title: "Math Wizard", req: req});
});
}else {
res.render('fibo.html', {title: "Math Wizard", req: req});
}
});
app.get('/factorial', htutil.loadParams, function(req, res){
if (req.a) req.result = math.factorial(req.a);
res.render('factorial.html', {title: "Math Wizard", req: req});
});
app.get('/404', function(req, res){
res.send('NOT FOUND' + req.url);
});
//res.render函數(shù)通過一個模板文件渲染數(shù)據(jù),EJS只是Express里眾多模板引擎中的一個
//配置目的是讓EJS能夠為views目錄下的所有.html文件服務
/*Express里還有其他一些模板引擎
res.render('index.haml', {..data..}); 使用Haml
res.render('index.jade', {..data..}); 使用Jade
res.render('index.ejs', {..data..}); 使用EJS
res.render('index.coffee', {..data..}); 使用CoffeeKup
res.render('index.jqtpl', {..data..}); 使用jQueryTemplates
也可以通過 app.set('view engine', 'haml');
app.set('view engine', 'jade'); 方法來改變默認的渲染引擎
layout.html
默認情況下,模板中用于渲染的內(nèi)容會被命名為body,然后傳遞到layout模板中,當app-express.js調用
res.render('fibo.html'...)時,它會先用fibo.html渲染對應的頁面片段,然后再使用layout模板渲染整個頁面
有兩種方法覆蓋這一默認的行為
1、在Express里創(chuàng)建一個全局的配置,通過這個全局配置來控制layout模板的啟用與禁用
app.set('view options', {layout: false(or true)});
2、覆蓋layout模板對應的渲染方式或者使用不同的layout模板
res.render('myview.ejs', {layout: false(or true)});
或者res.render('page', {layout: 'mylayout.jade'});
<% code %> Javascript代碼
<%= code %> 顯示替換過HTML特殊字符的內(nèi)容
<%- code %> 顯示原始HTML內(nèi)容
*/
app.listen(3000);
console.log('listening to http://localhost:3000');
html頁面放在views目錄下
layout.html
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<h1><%=title%></h1>
<table>
<tr>
<td>
<div class="navbar">
<p><a href="/" rel="external nofollow" >home</a></p>
<p><a href="/mult" rel="external nofollow" >Multiplication</a></p>
<p><a href="/square" rel="external nofollow" >Square</a></p>
<p><a href="/factorial" rel="external nofollow" >Factorial</a></p>
<p><a href="/fibonacci" rel="external nofollow" >Fibonacci</a></p>
</div>
</td>
<td></td>
</tr>
</table>
</body>
</html>
home.html
<% include layout.html %> <p>Math Wizard</p>
mult.html
<% include layout.html %>
<% if (req.a && req.b){ %>
<p class="result">
<%=req.a%> * <%=req.b%> = <%=req.result%>
</p>
<% } %>
<p>Enter numbers to multiply</p>
<form name="mult" action="/mult" method="get">
A: <input type="text" name="a" /><br/>
B: <input type="text" name="b" />
<input type="submit" name="Submit" />
</form>
還有其他一些頁面就不一一列出來了,都大同小異
希望本文所述對大家nodejs程序設計有所幫助。
相關文章
Node 搭建一個靜態(tài)資源服務器的實現(xiàn)
這篇文章主要介紹了Node 搭建一個靜態(tài)資源服務器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-05-05
解決Node.js包管理器安裝報錯npm?ERR!?code?1的問題
在開發(fā)過程中,我們經(jīng)常需要使用各種Node.js包來擴展我們的應用程序功能,這些包通常通過npm(Node.js包管理器)進行安裝和管理,有時候我們可能會遇到一些關于npm的錯誤,本文將詳細介紹如何解決這個問題,并提供一個詳細的實例,需要的朋友可以參考下2024-03-03
淺談node如何優(yōu)雅地獲取mac系統(tǒng)版本
這篇文章主要和大家聊聊node如何優(yōu)雅地獲取mac系統(tǒng)版本,文中有詳細的代碼示例和流程步驟,對我們學習或工作有一定的幫助,需要的朋友可以參考下2023-06-06
package.json與package-lock.json創(chuàng)建及使用詳解
這篇文章主要為大家介紹了package.json與package-lock.json創(chuàng)建及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
Node.js實現(xiàn)批量替換文件內(nèi)容示例
這篇文章主要為大家介紹了Node.js實現(xiàn)批量替換文件內(nèi)容示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
Docker平臺下NodeJs?Puppeteer實現(xiàn)html轉pdf過程示例
這篇文章主要為大家介紹了Docker平臺下NodeJs?Puppeteer實現(xiàn)html轉pdf過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12

