国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

教你快速搭建Node.Js服務器的方法教程

2019-11-19 16:58:26
字體:
來源:轉載
供稿:網友

前言

Node.js 是一個事件驅動 I/O 服務端 JavaScript 環境,也可以理解為服務器端運行的 JavaScript。JS 作為一門編程語言,是運行在稱為 JS 運行時的虛擬機中的,而在 I/O 功能上,JS 更多依賴于宿主環境。一般我們遇到的宿主環境主要是瀏覽器,Node.js 則是在服務器端運行的高速 JavaScript 解釋器。

近期遇到一個小型網站需要建立一個簡單的 Web 服務器,原本想用 SpringMVC 解決,無奈 Spring 的哲學博大精深,自己才疏學淺,不能快速出貨,因此決定用 Node.js 試試,這里就簡單介紹下如何快速啟動一個簡單易用的 Web Server。這里我使用的開發環境是基于 Ubuntu 14.04 的 Elementary OS。

1. 準備工作

1.1 安裝 NodeJS 環境和 npm 模塊管理器

sudo apt-get install nodejssudo apt-get install npm

npm 是一個優秀的 Node 模塊管理器,在開發中幫助我們解決很多第三方代碼庫的依賴管理事務。

1.2 設置 npm 代理

假如沒有提前做任何額外措施,那么必然當你使用 npm 從網絡下載自己需要的 NodeJs 模塊時,速度會非常慢,甚至會因超時而失敗,具體原因不多講,推薦使用淘寶的 npm 鏡像,問題會得到解決。

  • 打開 ~/.npmrc 文件
  • 輸入 registry = https://registry.npm.taobao.org
  • 保存退出

注意如果你曾設置過全局穿墻但是 npm 依然速度很慢,可以試試在 ~/.npmrc 文件中繼續添加

  • proxy=false

2. 用 Express Generator 搭建開發環境

Express 是目前最流行的基于 Node.js 的 Web 開發框架,可以快速地搭建一個完整功能的網站。

Express Generator 是 Express 的應用程序生成器工具,使用它可以快速建立完整的項目文件目錄。

2.1 安裝 Express Generator

$ npm install express-generator -g

2.2 建立 Express 應用程序

express --view=pug NodeApp

這里 view 參數是用來預設開發中使用的模板引擎的。更多參數如下

express -hUsage: express [options] [dir] Options: -h, --help output usage information --version output the version number -e, --ejs add ejs engine support --pug add pug engine support --hbs add handlebars engine support -H, --hogan add hogan.js engine support -v, --view <engine> add view <engine> support (ejs|hbs|hjs|jade|pug|twig|vash) (defaults to jade) -c, --css <engine> add stylesheet <engine> support (less|stylus|compass|sass) (defaults to plain css) --git add .gitignore -f, --force force on non-empty directory

2.3 解決模塊依賴

進入剛剛建立的 NodeApp 文件夾,可以看到里面有一個 package.json 文件,它定義了這個項目所需要的各種模塊,以及項目的配置信息(比如名稱、版本、許可證等元數據),npm可以依據它來管理項目模塊。

打開 package.json 可以看到里面的內容如下

{ "name": "NodeApp", "version": "0.0.0", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "body-parser": "~1.16.0", "cookie-parser": "~1.4.3", "debug": "~2.6.0", "express": "~4.14.1", "morgan": "~1.7.0", "pug": "~2.0.0-beta10", "serve-favicon": "~2.3.2" }}

現在在終端執行 npm 命令解決模塊依賴,npm 會按照 package.json 文件的內容下載相應模塊,當然,如果沒有設置穿墻措施這一步是無法執行的

npm intsall

3. 初次啟動服務器

基本上該有的配置和基本的邏輯代碼 Express Generator 都幫我們做好了,那么我們其實已經可以用一行命令啟動服務器了。

執行以下命令

npm start

訪問 localhost:3000 即可看到 Express 歡迎頁面了。

4. 設置訪問地址

可以看到在之前建立的文件目錄下還有一個 app.js 文件,其實它就充當了一個項目中的main函數的角色,里面使用了很多 Express 中間件和 Express 語法,這里不一一敘述。

在實際生產環境中,我們需要自己設定外部訪問端口,比如通過 Http 的 80 端口訪問我們的服務器,那么就可以在app.js文件的 "module.exports = app;" 語句前加上如下代碼

var server = app.listen(80, "0.0.0.0", function () { console.log("服務器IP地址:" + ip.address()); var host = server.address().address; var port = server.address().port; console.log("應用已啟動,訪問地址為 http://%s:%s", host, port)});

這里簡單解釋下,80 意味著我們的服務器程序將監聽本機的80端口,0.0.0.0 意味著本地和外部訪問請求都將由我們的服務器程序進行處理。

同時啟動了服務器后我們在終端也可以看到當前主機的IP地址以及服務器程序接受的訪問地址。

5. 設置 index 頁面內容

到這里為止,我們訪問 localhost 地址會看到 Express 默認的歡迎頁面,那么如何返回一個我們自己的頁面呢。比如我們現在有一個 index.html 頁面,我們需要在用戶訪問 localhost 時返回這個 html 頁面,暫時不考慮靜態文件的問題。

可以進入 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 index = require('./routes/index');var users = require('./routes/users');var app = express();// view engine setupapp.set('views', path.join(__dirname, 'views'));app.set('view engine', 'pug');// uncomment after placing your favicon in /public//app.use(favicon(path.join(__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('/', index);app.use('/users', users);// catch 404 and forward to error handlerapp.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err);});// error handlerapp.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error');});var server = app.listen(80, "0.0.0.0", function () { console.log("服務器IP地址:" + ip.address()); var host = server.address().address; var port = server.address().port; console.log("應用已啟動,訪問地址為 http://%s:%s", host, port)});module.exports = app;

其中有一句是這樣的

app.use('/', index);

它的含義是當服務器程序捕獲訪問路徑為 "/" 的請求時,由 index 中間件進行相應處理。

在這里對于 Express 中間件網上有很好的描述

簡單說,中間件(middleware)就是處理 HTTP 請求的函數。它最大的特點就是,一個中間件處理完,再傳遞給下一個中間件。App 實例在運行過程中,會調用一系列的中間件。 每個中間件可以從 App 實例,接收三個參數,依次為 request 對象(代表 HTTP 請求)、response 對象(代表 HTTP 回應),next 回調函數(代表下一個中間件)。每個中間件都可以對 HTTP 請求(request 對象)進行加工,并且決定是否調用next 方法,將 request 對象再傳給下一個中間件。

那么 index 中間件從何而來呢?

var index = require('./routes/index');

所以我們可以去 routes 文件夾下查看 index 文件,它應該長這樣

var express = require('express');var router = express.Router();/* GET home page. */router.get('/', function(req, res, next) { res.render('index', { title: 'Express' });});module.exports = router;

從代碼注釋可以看出,這里就是負責返回前面提到的 Express 歡迎頁面的邏輯代碼,當然它使用到了模板引擎的知識,我們不具體介紹,直接簡單粗暴地實現我們的需求吧。

首先我們把 index.html 頁面保存到文件目錄下的 public/html 文件夾下(沒有就自己創建),然后我們在 routes/index 文件中返回這個 html 頁面,在這里我們將使用到文件讀寫方法。

var path = require('path');res.sendFile(path.resolve('public/html/index.html'));

path 變量是 Express 中的變量,path.resolve 方法可以將傳入的相對地址轉換為絕對地址,這里面涉及到關于 NodeJs 文件路徑的知識,不做具體介紹。

res 變量代表著服務器對于此次請求的返回對象,那么在這里相當于我們向客戶端返回的是存放在 public/html/index.html 文件。

重啟程序,訪問 localhost,就可以看到 index.html 了。

6. 設置靜態文件路徑

對于 JS 和 CSS 這樣的靜態文件,在 Express 中都統一放置在 public 文件夾下,Express 遇到對靜態文件的請求將會從 pulic 下讀取并返回相應文件。

而設置這一路徑的語句其實也在 app.js 中

app.use(express.static(path.join(__dirname, 'public')));

因此如果項目需要,也可以自行修改這一路經。

7. 后臺運行服務器

在之前我們終端運行 npm start 的時候,應該可以看到所有訪問打印的日志語句都在終端顯示了,這時如果我們關閉終端,程序也將相應停止,那么如何在后臺運行我們的服務器程序,并將打印的日志語句都寫入到專門的日志文件呢,這里需要用到 Linux 的 nohup 命令和重定向符。

npm start 1> log 2> error

> 是linux下的重定向符。> 將會重新寫入目標文件,即不保存目標文件的原始內容,如果使用 >> 則會在目標文件后面附加內容。

在 Linux 中,一個程序可以在幾個編號的文件流中的任一個上產生輸出。然而我們必須把這些文件流的前三個看作標準輸入,輸出和錯誤,shell 內部參考它們為文件描述符 0,1 和 2。因此這個語句的意思就是將標準輸出重定向到當前目錄下的 log 文件中,將錯誤輸出重定向到當前目錄下的 error 文件中。

但是這樣只解決了輸出信息的轉移輸出問題,程序依然是在終端下運行的。可以使用 Linux 下的 nohup 命令實現這一目的,使用如下

nohup npm start 1> log 2> error &

不要忘記最末位的 & 符號。

在后臺運行作業時要當心:需要用戶交互的命令不要放在后臺執行,因為這樣你的機器就會在那里傻等。不過,作業在后臺運行一樣會將結果輸出到屏幕上,干擾你的工作,因此需要重定向符的幫助。

后續

現在一個簡單的 Web 服務器就搭建完成了,這只是一個 Web 服務器最開始的一段路,后面的開發則需要對 NodeJs 和 Express 的深入學習和使用。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 怀安县| 古蔺县| 湖口县| 辉县市| 贞丰县| 乌海市| 清水县| 大田县| 会同县| 安西县| 涿州市| 宁河县| 大关县| 四会市| 乌鲁木齐县| 富宁县| 伊吾县| 蒲江县| 建始县| 平阳县| 大关县| 察隅县| 鄂伦春自治旗| 土默特右旗| 景东| 苏州市| 大英县| 河北区| 靖边县| 当雄县| 志丹县| 泰兴市| 杭锦后旗| 甘南县| 新源县| 于都县| 汝南县| 腾冲县| 新化县| 周宁县| 五指山市|