node.js退出程序,nodejs結束運行

本文目錄一覽:

windows下node.js出錯退出了怎麼解決

隨著近日Paypal和Netflix宣告 遷移到Node.js, 伺服器端Javascript平台已經證明其自身在企業領域的價值. 這對於Node來說是一小步,對於Javascript而言卻是一大跨越啊! 來自.NET, Java, PHP, Ruby on Rails和更多技術領域的程序員, 所有遊走於伺服器端的編碼者都會聚集到這個平台上. 作為像 Yahoo, Walmart, 和 Oracle 這樣的大玩家入局,, Node 正在甩掉其一直就存在的不成熟和不穩定的壞名聲. 在這篇文章中,我會向你展示在Window環境下安裝Node.js到底有多容易.安裝Node.js讓Node.js安裝在Windows上就是小事一樁. 到 Node.js 網站下載並運行”.msi”文件. 它將會把Node.js 和 NPM (Node包管理模塊)安裝上. NPM 相當於用於.NET應用的 NuGet 包管理器.運行Node.js在Windows上運行Node.js同樣很容易. 打開 PowerShell 並輸入 “node -v” 確保Node在你的環境變數,並查看你正在運行的Node.js的版本. 同樣的輸入 “npm -v” 來查看你安裝的Node包管理工具的版本. 你弄好了沒? Ok, 讓我們來開始享受樂趣吧!!打開記事本程序,我們將構建我們的第一個Node.js應用. 把下面的代碼複製到記事本程序中,使用任何文件名都可以,比如”example.js”, 並把它保存到你希望的文件夾中:var http = require(‘http’); http.createServer(function (req, res) { res.writeHead(200, {‘Content-Type’: ‘text/plain’}); res.end(‘Hello Node’); }).listen(1337, ‘127.0.0.1’); 現在回到 PowerShell. 將路徑變更到你的”example.js”文件存放的地方,並運行Node!cd C:\Websites\NodeTest node example.js 開啟你的網頁瀏覽器,導航輸入 127.0.0.1:1337. 起作用了么? 恭喜你運行了你的第一個Node.js應用!提供網站服務你會擔憂我會只留下一個 “Hello World” 示例就收工了? 如果我們知道如何去運行一個HTML文件,那將會更加的美好. 添加一個 “index.html” 文件,裡面可以是任何HTML內容. 將會像這樣:html head titleSample Node.js Website/title /head body pThis is the home page for you Node.js website./p /body /html 是時候運行應用了。創建一個可以叫任何名字的新文件,比如 “index.js”, 並把如下的js代碼加到裡面:var http = require(‘http’); var fs = require(‘fs’); http.createServer(function(req, res){ fs.readFile(‘index.html’,function (err, data){ res.writeHead(200, { ‘Content-Type’: ‘text/html’, ‘Content-Length’: data.length }); res.write(data); res.end(); }); }).listen(1337, ‘127.0.0.1’); 事情在這裡開始變得更加有趣了. 注意開頭的地方多了一行 “require” . 你正在往你的應用中帶入需要的依賴程序. 這像是C#中用來調用依賴程序的 “using” 命名空間指令.通過在PowerShell中輸入: node index.js 來運行”index.js”(不要忘了敲擊 Ctrl-C來退出上一個Node應用的運行,或者在這一次使用一個新的埠號). 在你的瀏覽器中,導航到127.0.0.1:1337 ,你就應該會看到你的HTML文件了. 你將可能在這點成就上感到有些激動, 但如果你想我,就會對它產生一些複雜的感覺. 這還只是低級別的編程,如果我不得不去考慮讀取/流媒體文件,還有有關每次應該發送什麼狀態這些問題的時候,世界很快就會變得煩惱重重. 向 ExpressJS道好吧!使用Node包管理器Node.js有一個再次讓我們感覺世界美好的搭檔. ExpressJS 屏蔽掉了需要在Node.js進行的老調重彈,讓你可以直接進入web開發. 它是一個可以讓你構建單頁,多頁還有混合類型web應用程序的web框架. 沒有它你在 Node.js 領域是不會有盼頭滴!首先使用 NPM 來安裝它. 為此,再一次打開PowerShell並切換到你的應用程序的路徑. 現在輸入: npm install express. 它將會創建一個叫做 “node_modules” 來安裝 ExpressJS. 從這個角度上看,你的Node模塊將會放到那裡,有點像在.NET應用中的”bin”目錄, 從這裡你可以調用或者”require”你的依賴程序.ExpressJS入門現在任意創建一個新文件, 比如 “server.js”, 並把下面的代碼粘貼進去:var express = require(‘express’); //CREATE APP var app = express(); //LOCATION OF STATIC CONTENT IN YOUR FILESYSTEM app.use(express.static(__dirname)); //PORT TO LISTEN TO app.listen(1337); 這是在調用ExpressJS的依賴, 然後從它那裡創建一個應用. 從此你可就牛逼大發了! 在這裡,我們只是簡單的提供靜態文件服務. “__dirname” 是來自ExpressJS的一個特殊的變數,意思是根文件系統位置. 最後你告訴應用去偵聽埠 1337. 現在你就擁有了一個提供靜態文件服務的 Node.js 站點了! 另外在新增一些HTML文件,一些放在子目錄中,然後到127.0.0.1:1337 測試看看吧.關於 IIS在這些示例中, 我一直都是在埠1337運行應用,而不是埠80.原因是IIS已經偵聽了80埠. 有許多的方法可以使IIS 和 Node.js 和諧共存:IISNode: 這是一個在你的IIS站點讓Node.js像一個應用池那樣運行的很聰明的點子, 同在IIS中與運行PHP很像. 事實上,Azure就是用這個在其平台上運行Node.js的. WinServ: 它讓 Node.js 像一個Windows服務那樣運行. 它實際上是對流行了 NSSM (Non-Sucking Service Manager)的一個對Node.js友好的封裝. 一旦作為一個服務運行,你就可以使用IIS的應用請求路由(ARR) 來代理向你的Node.js應用埠發起的請求. 關於 MS SQL有許多為Node.js準備的 MS SQL 驅動程序, 有些甚至是跨平台的. 有一個只能在Windows環境中運行的,是由Windows Azure發布: Microsoft Driver for Node.js for SQL Server. 而你可以像下面這樣開始工作:var sql = require(‘node-sqlserver’); var connStr = “Driver={SQL Server Native Client 11.0};Server=(local);Database=AdventureWorks2012;Trusted_Connection={Yes}”; var cmd = “SELECT TOP 10 FirstName, LastName FROM Person.Person”; sql.open(connStr, function (err, conn) { conn.queryRaw(cmd , function (err, results) { for (var i = 0; i results.rows.length; i++) { console.log( “FirstName: ” + results.rows[i][0] + ” LastName: ” + results.rows[i][1]); } }); }); 總結這些都只是皮毛! 與 ExpressJS攜手, 你將能夠創建帶有路由、視圖、布局、服務還有更多組件的完全成熟的MVC應用程序. 同樣,除非你需要去集成一些現有的Microsoft應用程序或者MS SQL資料庫, MongoDB 在你創建一個Node堆棧式是能幫助你從SQL中解放的好夥伴. 最後,你可以使用MEAN創建一個MEAN Javascript全棧應用, 包括有MongoDB, ExpressJS, AngularJS, 和Node.js. 現在企業已經向Node.js靠攏了, 對你而言同樣是不是時候來輔助行動了呢?

如何退出用node.js執行的腳本

1、直接運行run.bat文件

下面的內容為批處理文件run.bat中的內容,批處理命令中NODE_PATH為Node.js的安裝路徑。使用express 生成的項目。app.js為待測試的Node.js 文件。

@set NODE_PATH=D:\nodejs\demo\npm

@echo %PATH% | find “Node.js”

@if %errorlevel% == 1 set PATH=%PATH%;%NODE_PATH%

@rem @echo %cd%

@node app.js

2、通過參數運行run.bat文件

批處理文件僅起到設置環境變數的作用,在Node.js項目的目錄下運行。批處理文件命令為:

@set NODE_PATH=D:\nodejs\demo\npm

@echo %PATH% | find “Node.js”

@if %errorlevel% == 1 set PATH=%PATH%;%NODE_PATH%

@rem @echo %cd%

@node %1

例如:

D:\nodejs\demo\node app.js

nodejs終端命令行模式怎麼退出

推出node命令行:兩次ctrl+C或者一次ctrl+D

退出終端:exit;

(經測試,都沒什麼問題)

node.js怎麼監聽程序強制退出

nodejs中可以通過監聽信號量的來監聽程序的退出

例如 SIGINT 監聽ctrl-D/Control-C退出程序

process.on(‘SIGINT’, function() {

console.log(‘Got SIGINT. Press Control-D/Control-C to exit.’);

});

node執行js代碼怎麼退出當前代碼

你輸入js代碼並按下回車後,node會輸出執行完該代碼後的返回值,如果沒有返回值,肯定就顯示undefined了,這個跟Chrome的調試工具相似;

執行process.exit()退出;

node.js 基礎操作

require 函數用來在一個模塊中引入另外一個模塊。傳入一個模塊名,返回一個模塊導出對象。用法: let cc = require(“模塊名”) ,其中模塊名可以用絕對路徑也可以用相對路徑,模塊的後綴名.js可以省略。例如:

require()函數用兩個作用:

exports 對象用來導出當前模塊的公共方法或屬性,別的模塊通過 require 函數使用當前模塊時得到的就是當前模塊的 exports 對象。用法: exports.name ,name為導出的對象名。例子:

module.exports 用來導出一個默認對象,沒有指定對象名,常見於修改模塊的原始導出對象。比如原本模塊導出的是一個對象,我們可以通過module.exports修改為導出一個函數。如下:

3.載入第三方包

Node.js中使用 CommonJs 模塊化機制,通過 npm 下載的第三方包,我們在項目中引入第三方包都是: let xx = require(‘第三方包名’) ,究竟 require 方法載入第三方包的原理機制是什麼,今天我們來探討下。

require(‘第三方包名’) 優先在載入該包的模塊的同級目錄 node_modules 中查找第三方包。

找到該第三方包中的 package.json 文件,並且找到裡面的 main 屬性對應的入口模塊,該入口模塊即為載入的第三方模塊。

如果在要載入的第三方包中沒有找到 package.json 文件或者是 package.json 文件中沒有 main 屬性,則默認載入第三方包中的 index.js 文件。

如果在載入第三方模塊的文件的同級目錄沒有找到 node_modules 文件夾,或者以上所有情況都沒有找到,則會向上一級父級目錄下查找 node_modules 文件夾,查找規則如上一致。

如果一直找到該模塊的磁碟根路徑都沒有找到,則會報錯: can not find module xxx 。

4.npm命令

npm 英文全稱: node package manager ,npm 為你和你的團隊打開了連接整個 JavaScript 天才世界的一扇大門。它是世界上最大的軟體註冊表,每星期大約有 30 億次的下載量,包含超過 600000 個 包(package) (即,代碼模塊)。來自各大洲的開源軟體開發者使用 npm 互相分享和借鑒。包的結構使您能夠輕鬆跟蹤依賴項和版本。我們平時開發項目都是需要使用npm下載依賴,常見的npm命令總結如下:

5.文件讀取

var fs = require(‘fs’)

同步:

var content = fs.readFileSync(‘hello.txt’,{flag:’r’,encoding:”utf-8″})

非同步(默認):

flag:讀取模式

encoding:編碼格式

7.文件寫入

var fs = require(‘fs’)

格式:write=w read=r append =a

非同步:

8.文件刪除

fs . unlink ( ‘lc.txt’ , function (){

9.buffer緩衝區

1、數組不能進行二進位數據的操作2、js數組不像java、python等語言效率高3、buffer內存空間開闢出固定大小的內存

let buf1 = Buffer.alloc(10)

console.log(buf1)

allocUnsafe(之前的一些內容)(效率高)

10.文件目錄

var fs = require(‘fs’)

fs.readdir(path,callback)

導入 readline 包

let readline = require(‘readline’);

實例化介面對象(process對象,stdout/in輸入輸出)

question方法 提問

close 事件監聽

11.文件流

var fs = require(‘fs’)

語法: fs.createWriteStream(文件路徑,【可選的配置操作】)

let ws = fs.createWriteStream(“hello.txt”,{flags:”w”,encoding:”utf-8″});

let ws = fs.createWriteStream(“hello.txt”,{flags:”w”,encoding:”utf-8″});

實踐

fs.createReadStream(路徑,【可選的配置項】)

文檔

let rs = fs.createReadStream(‘hello.txt’,{flags:’r’,encoding:”utf-8″})

音樂

let rs = fs.createReadStream(‘snake.mp4′,{flags:’r’})

讀取時寫入

let ws = fs.createWriteStream(‘a.txt’,{flags:”w”,encoding:”utf-8″})

createReadStream.pipe(createWriteStream)

鏈式是通過連接輸出流到另外一個流並創建多個流操作鏈的機制。鏈式流一般用於管道操作。

接下來我們就是用管道和鏈式來壓縮和解壓文件。

創建 compress.js 文件, 代碼如下:

代碼執行結果如下:

執行完以上操作後,我們可以看到當前目錄下生成了 input.txt 的壓縮文件 input.txt.gz。

接下來,讓我們來解壓該文件,創建 decompress.js 文件,代碼如下:

12.node事件

Node.js 是單進程單線程應用程序,但是因為 V8 引擎提供的非同步執行回調介面,通過這些介面可以處理大量的並發,所以性能非常高。

Node.js 幾乎每一個 API 都是支持回調函數的。

Node.js 基本上所有的事件機制都是用設計模式中觀察者模式實現。

Node.js 單線程類似進入一個while(true)的事件循環,直到沒有事件觀察者退出,每個非同步事件都生成一個事件觀察者,如果有事件發生就調用該回調函數.

沒有使用 events 包 僅使用JavaScript事件監聽進行事件驅動

Node.js 使用事件驅動模型,當web server接收到請求,就把它關閉然後進行處理,然後去服務下一個web請求。

當這個請求完成,它被放回處理隊列,當到達隊列開頭,這個結果被返回給用戶。

這個模型非常高效可擴展性非常強,因為 webserver 一直接受請求而不等待任何讀寫操作。(這也稱之為非阻塞式IO或者事件驅動IO)

在事件驅動模型中,會生成一個主循環來監聽事件,當檢測到事件時觸發回調函數。

Node.js 有多個內置的事件,我們可以通過引入 events 模塊,並通過實例化 EventEmitter 類來綁定和監聽事件,如下實例:

以下程序綁定事件處理程序:

我們可以通過程序觸發事件:

接下來讓我們執行以上代碼:

在 Node 應用程序中,執行非同步操作的函數將回調函數作為最後一個參數, 回調函數接收錯誤對象作為第一個參數。

接下來讓我們來重新看下前面的實例,創建一個 input.txt ,文件內容如下:

創建 main.js 文件,代碼如下:

以上程序中 fs.readFile() 是非同步函數用於讀取文件。如果在讀取文件過程中發生錯誤,錯誤 err 對象就會輸出錯誤信息。

如果沒發生錯誤,readFile 跳過 err 對象的輸出,文件內容就通過回調函數輸出。

執行以上代碼,執行結果如下:

接下來我們刪除 input.txt 文件,執行結果如下所示:

因為文件 input.txt 不存在,所以輸出了錯誤信息。

Node.js 所有的非同步 I/O 操作在完成時都會發送一個事件到事件隊列。

Node.js 裡面的許多對象都會分發事件:一個 net.Server 對象會在每次有新連接時觸發一個事件, 一個 fs.readStream 對象會在文件被打開的時候觸發一個事件。所有這些產生事件的對象都是 events.EventEmitter 的實例。

events 模塊只提供了一個對象:events.EventEmitter。EventEmitter 的核心就是事件觸發與事件監聽器功能的封裝。

你可以通過require(“events”);來訪問該模塊。

EventEmitter 對象如果在實例化時發生錯誤,會觸發 error 事件。當添加新的監聽器時,newListener 事件會觸發,當監聽器被移除時,removeListener 事件被觸發。

下面我們用一個簡單的例子說明 EventEmitter 的用法:

執行結果如下:

運行這段代碼,1 秒後控制台輸出了 ‘some_event 事件觸發’ 。其原理是 event 對象註冊了事件 some_event 的一個監聽器,然後我們通過 setTimeout 在 1000 毫秒以後向 event 對象發送事件 some_event,此時會調用some_event 的監聽器。

EventEmitter 的每個事件由一個事件名和若干個參數組成,事件名是一個字元串,通常表達一定的語義。對於每個事件,EventEmitter 支持 若干個事件監聽器。

當事件觸發時,註冊到這個事件的事件監聽器被依次調用,事件參數作為回調函數參數傳遞。

讓我們以下面的例子解釋這個過程:

執行以上代碼,運行的結果如下:

以上例子中,emitter 為事件 someEvent 註冊了兩個事件監聽器,然後觸發了 someEvent 事件。

運行結果中可以看到兩個事件監聽器回調函數被先後調用。這就是EventEmitter最簡單的用法。

EventEmitter 提供了多個屬性,如 on 和 emit 。 on 函數用於綁定事件函數, emit 屬性用於觸發一個事件。接下來我們來具體看下 EventEmitter 的屬性介紹。

原創文章,作者:NKEM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/146311.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
NKEM的頭像NKEM
上一篇 2024-10-29 19:00
下一篇 2024-10-29 19:00

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • Python購物車程序

    Python購物車程序是一款基於Python編程語言開發的程序,可以實現購物車的相關功能,包括商品的添加、購買、刪除、統計等。 一、添加商品 添加商品是購物車程序的基礎功能之一,用…

    編程 2025-04-29
  • 爬蟲是一種程序

    爬蟲是一種程序,用於自動獲取互聯網上的信息。本文將從如下多個方面對爬蟲的意義、運行方式、應用場景和技術要點等進行詳細的闡述。 一、爬蟲的意義 1、獲取信息:爬蟲可以自動獲取互聯網上…

    編程 2025-04-29
  • Vb運行程序的三種方法

    VB是一種非常實用的編程工具,它可以被用於開發各種不同的應用程序,從簡單的計算器到更複雜的商業軟體。在VB中,有許多不同的方法可以運行程序,包括編譯器、發布程序以及命令行。在本文中…

    編程 2025-04-29
  • Python一元二次方程求解程序

    本文將詳細闡述Python一元二次方程求解程序的相關知識,為讀者提供全面的程序設計思路和操作方法。 一、方程求解 首先,我們需要了解一元二次方程的求解方法。一元二次方程可以寫作: …

    編程 2025-04-29
  • 如何使用GPU加速運行Python程序——以CSDN為中心

    GPU的強大性能是眾所周知的。而隨著深度學習和機器學習的發展,越來越多的Python開發者將GPU應用於深度學習模型的訓練過程中,提高了模型訓練效率。在本文中,我們將介紹如何使用G…

    編程 2025-04-29
  • Web程序和桌面程序的區別

    Web程序和桌面程序都是進行軟體開發的方式,但是它們之間存在很大的區別。本文將從多角度進行闡述。 一、運行方式 Web程序運行於互聯網上,用戶可以通過使用瀏覽器來訪問它。而桌面程序…

    編程 2025-04-29

發表回復

登錄後才能評論