中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何搭建Node.Js服務器

發布時間:2021-07-13 14:49:33 來源:億速云 閱讀:156 作者:小新 欄目:web開發

這篇文章給大家分享的是有關如何搭建Node.Js服務器的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

前言

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 nodejs
sudo 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 -h

Usage: 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 setup
app.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 handler
app.use(function(req, res, next) {
 var err = new Error('Not Found');
 err.status = 404;
 next(err);
});

// error handler
app.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 的深入學習和使用。

感謝各位的閱讀!關于“如何搭建Node.Js服務器”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉峪关市| 石嘴山市| 长白| 西贡区| 梁河县| 黎川县| 台江县| 吉安县| 刚察县| 瓦房店市| 武胜县| 新乐市| 庆安县| 什邡市| 昂仁县| 万荣县| 禄劝| 沧源| 隆安县| 博罗县| 正阳县| 五莲县| 调兵山市| 宽甸| 博兴县| 乐亭县| 旬邑县| 景德镇市| 津南区| 米泉市| 海南省| 金坛市| 屏边| 东阿县| 贵阳市| 绥化市| 峨眉山市| 青浦区| 华蓥市| 客服| 静乐县|