1. 程式人生 > >node.js 安裝配置 npm ,express,ejs模板

node.js 安裝配置 npm ,express,ejs模板

本人近端時間看了下node.js,學習是從菜鳥教程   http://www.runoob.com/nodejs/nodejs-tutorial.html 入門。

首先講一下體會,首先自己是個java程式設計師,剛接觸node.js,有點新鮮就去學了,首先是安裝windows版的node.js。如果不熟悉環境配置,要選擇msi格式的,因為安裝的過程中會把環境變數給你配好。好了安裝好以後,要安裝express,express對node.js進行了封裝,對web的前後端互動很好。然後安裝ejs模板,ejs模板可以接受node.jsserver傳的值,當然ejs檔案也要經過node.js直譯器。就像java web 要經過tomcat ,java 要經過jvm一樣。所有檔案,如js檔案,ejs檔案,都需要經過node.js伺服器解釋,然後輸出到瀏覽器。首先 有很多分散的js檔案,這些js檔案每個js檔案都使用exports.world = function(){}或者function Hello() { }module.exports = Hello;把這個方法或模組暴露出去,var Hello = require('./hhhhhh');  hello = new Hello(); 去require這個hhhhh.js,就能獲得暴露出的物件,就可以拿來直接用。



這些js檔案都如果要啟動服務端的一個工程,就需要一個入口,這個入口就是一個繫結 埠,並通過listen(80,function())監聽埠。然後在瀏覽器中輸入localhost:80/就能訪問到伺服器。在安裝的伺服器根目錄下,放一個html檔案,就能使用localhost:80/**.html訪問到。node.js伺服器就相當於一個jvm,所有的檔案都要經過這個伺服器的解釋去執行。當然有些也不是必須在伺服器中解釋,不是服務端的js如一個js檔案,裡面只有一些平常的js方法(不是node.js中的方法),我們直接可以放在html中,而node.js的js檔案就不能放在html中,這樣會無法解釋。需要伺服器執行的js,都要通過繫結埠的js檔案執行,也就是,需要引入到繫結埠的js中。幫頂埠號的js相當於啟動了一個埠服務,只有啟動這個js,我們才能訪問他,相當於jetty啟動java web服務一樣。

node.js 是單執行緒的,但是我們可以通過fs.readFile('input.txt', function (err, data) {alert()}) 回撥函式去執行readFile函式的同時,去執行alert()函式。也可以使用事件繫結eventEmitter.on('data_received', function(){}實現併發, 的每一個 API 都是非同步的,並作為一個獨立執行緒執行,使用非同步函式呼叫,並處理併發。

node.js支援對檔案的讀寫,對二進位制資料流的讀寫,

node.js 路由功能可以獲得客戶端請求的地址,包括引數

node.js 的函式 可以以函式物件做引數傳遞,function say(word) {   console.log(word); }  function execute(someFunction, value) {   someFunction(value); }  execute(say, "Hello");

node.js模組系統可以把一個檔案系統中的方法定義成一個模組,假如一個aaa.j裡面要簡歷一個模組s。可以使用exports 如:exports.world = function() {   console.log('Hello World'); }去定義,也可以使用module.exports  如   function Hello() {};  module.exports = Hello; 去定義。然後在另一個js檔案中var Hello = require('./aaa');  hello = new Hello(); 去呼叫。注意require('./aaa');是引入aaa,js檔案,可以寫絕對路徑也可以寫相對路徑。

node.js 的全域性變數如 優點和thinkPhp框架的全域性變數相似。如__filename是當前模組檔案的路徑如:/web/com/runoob/nodejs/main.js。

node.js 有一些常用的方法:如util.isRegExp(object)表示是否是正則表示式。util.isDate(object)是否是時間

node.js的web服務

var http =require('http');var fs =require('fs');var url =require('url');// 建立伺服器
http.createServer(function(request, response){// 解析請求,包括檔名var pathname = url.parse(request.url).pathname;// 輸出請求的檔名
   console.log("Request for "+ pathname +" received.");// 從檔案系統中讀取請求的檔案內容
   fs.readFile(pathname.substr(1),function(err, data){if(err){
         console.log(err);// HTTP 狀態碼: 404 : NOT FOUND// Content Type: text/plain
         response.writeHead(404,{'Content-Type':'text/html'});}else{// HTTP 狀態碼: 200 : OK// Content Type: text/plain
         response.writeHead(200,{'Content-Type':'text/html'});// 響應檔案內容
         response.write(data.toString());}//  傳送響應資料
      response.end();});}).listen(8081);// 控制檯會輸出以下資訊
console.log('Server running at http://127.0.0.1:8081/');
在此檔案的同目錄下建立一個html,然後輸入localhost:8081/**.html就能訪問到。

node.js express 

安裝 

npm install express --save

以上命令會將 Express 框架安裝在當期目錄的 node_modules 目錄中, node_modules 目錄下會自動建立 express 目錄。以下幾個重要的模組是需要與 express 框架一起安裝的:

  • body-parser - node.js 中介軟體,用於處理 JSON, Raw, Text 和 URL 編碼的資料。

  • cookie-parser - 這就是一個解析Cookie的工具。通過req.cookies可以取到傳過來的cookie,並把它們轉成物件。

  • multer - node.js 中介軟體,用於處理 enctype="multipart/form-data"(設定表單的MIME編碼)的表單資料。

$ npm install body-parser --save
$ npm install cookie-parser --save
$ npm install multer --save

Express 框架核心特性:

  • 可以設定中介軟體來響應 HTTP 請求。

  • 定義了路由表用於執行不同的 HTTP 請求動作。

  • 可以通過向模板傳遞引數來動態渲染 HTML 頁面。


//express_demo.js 檔案var express =require('express');var app = express();

app.get('/aaa',function(req, res){
   res.send('Hello World');})var server = app.listen(8081,function(){var host = server.address().address
  var port = server.address().port

  console.log("應用例項,訪問地址為 http://%s:%s", host, port)})
通過app.get()就可以繫結一個類似javaweb的controller,然後去訪問這個路徑,node.js伺服器就能給瀏覽器響應,與有沒有aaa檔案沒有關係。

Express 應用使用回撥函式的引數: request 和 response 物件來處理請求和響應的資料。

app.get('/',function(req, res){// --})

request 和 response 物件的具體介紹:

Request 物件 - request 物件表示 HTTP 請求,包含了請求查詢字串,引數,內容,HTTP 頭部等屬性。常見屬性有:

  1. req.app:當callback為外部檔案時,用req.app訪問express的例項
  2. req.baseUrl:獲取路由當前安裝的URL路徑
  3. req.body / req.cookies:獲得「請求主體」/ Cookies
  4. req.fresh / req.stale:判斷請求是否還「新鮮」
  5. req.hostname / req.ip:獲取主機名和IP地址
  6. req.originalUrl:獲取原始請求URL
  7. req.params:獲取路由的parameters
  8. req.path:獲取請求路徑
  9. req.protocol:獲取協議型別
  10. req.query:獲取URL的查詢引數串
  11. req.route:獲取當前匹配的路由
  12. req.subdomains:獲取子域名
  13. req.accpets():檢查請求的Accept頭的請求型別
  14. req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages
  15. req.get():獲取指定的HTTP請求頭
  16. req.is():判斷請求頭Content-Type的MIME型別

Response 物件 - response 物件表示 HTTP 響應,即在接收到請求時向客戶端傳送的 HTTP 響應資料。常見屬性有:

  1. res.app:同req.app一樣
  2. res.append():追加指定HTTP頭
  3. res.set()在res.append()後將重置之前設定的頭
  4. res.cookie(name,value [,option]):設定Cookie
  5. opition: domain / expires / httpOnly / maxAge / path / secure / signed
  6. res.clearCookie():清除Cookie
  7. res.download():傳送指定路徑的檔案
  8. res.get():返回指定的HTTP頭
  9. res.json():傳送JSON響應
  10. res.jsonp():傳送JSONP響應
  11. res.location():只設置響應的Location HTTP頭,不設定狀態碼或者close response
  12. res.redirect():設定響應的Location HTTP頭,並且設定狀態碼302
  13. res.send():傳送HTTP響應
  14. res.sendFile(path [,options] [,fn]):傳送指定路徑的檔案 -會自動根據檔案extension設定Content-Type
  15. res.set():設定HTTP頭,傳入object可以一次設定多個頭
  16. res.status():設定HTTP狀態碼
  17. res.type():設定Content-Type的MIME型別

node.js處理靜態檔案

Express 提供了內建的中介軟體 express.static 來設定靜態檔案如:圖片, CSS, JavaScript 等。

你可以使用 express.static 中介軟體來設定靜態檔案路徑。例如,如果你將圖片, CSS, JavaScript 檔案放在 public 目錄下,你可以這麼寫:

var express =require('express');var app = express();

app.use(express.static('public'));
啟動服務入口js。在瀏覽器中訪問 http://127.0.0.1:8081/images/logo.png(本例項採用了菜鳥教程的logo),就可以看到圖片。

node.js 多程序

我們都知道 Node.js 是以單執行緒的模式執行的,但它使用的是事件驅動來處理併發,這樣有助於我們在多核 cpu 的系統上建立多個子程序,從而提高效能。

每個子程序總是帶有三個流物件:child.stdin, child.stdout 和child.stderr。他們可能會共享父程序的 stdio 流,或者也可以是獨立的被導流的流物件。

Node 提供了 child_process 模組來建立子程序,方法有:

  • exec - child_process.exec 使用子程序執行命令,快取子程序的輸出,並將子程序的輸出以回撥函式引數的形式返回。

  • spawn - child_process.spawn 使用指定的命令列引數建立新執行緒。

  • fork - child_process.fork 是 spawn()的特殊形式,用於在子程序中執行的模組,如 fork('./son.js') 相當於 spawn('node', ['./son.js']) 。與spawn方法不同的是,fork會在父程序與子程序之間,建立一個通訊管道,用於程序之間的通訊。

node.js 連線資料庫

1、首先需要安裝nodejs 的mysql包

npm install mysql

2、編寫nodejs與mysql互動的程式碼

複製程式碼
var mysql = require('mysql');  
      
var TEST_DATABASE = 'ceshi';  
var TEST_TABLE = 'user';  
  
//建立連線  
var client = mysql.createConnection({  
  user: 'root',  
  password: '',  
});  

client.connect();
client.query("use " + TEST_DATABASE);

client.query(  
  'SELECT * FROM '+TEST_TABLE,  
  function selectCb(err, results, fields) {  
    if (err) {  
      throw err;  
    }  
      
      if(results)
      {
          for(var i = 0; i < results.length; i++)
          {
              console.log("%d\t%s\t%s", results[i].id, results[i].name, results[i].age);
          }
      }    
    client.end();  
  }  
); 

node.js .前後臺互動和資料傳遞。

本人使用 express 和ejs.首先利用npm install express和npm install ejs。當然jade 比較ejs更為強大。

node.js 檔案 

exports.userlist = function(db) {
    return function(req, res) {
        var collection = db.get('usercollection');
        collection.find({},{},function(e,docs){
            res.render('userlist', {
                "userlist" : docs
            });
        });
    };
};
這裡首先定義了一個function,接收我們傳過來的db變數,然後呼叫一個跟前面兩個route一樣的page render。我們告訴它需要讀取usercollection,做一個查詢,返回的資料儲存在docs變數中。一旦我們讀取到了內容,就呼叫render來渲染userlist模板頁面,userlist預設是在本目錄下views/userlist.ejs檔案。把獲取到的docs變數作為模板引擎中的userlist變數傳遞進去。

<!DOCTYPE html>
<html>
<head>
<title>USERLIST</title>
<link rel=’stylesheet’ href=’/stylesheets/style.css’ />
</head>
<body>
<h1>Userlist</h1>
<ul>
<%
for(var i in userlist){
%>
<li><a href=”mailto:<%=userlist[i].email%>”><%=userlist[i].username%></a></li>
<% } %>
</ul>
</body>
</html>

ejs 是以ejs結尾的檔案,他在ejs中用<%=bbbb%>來引入js傳入的變數,其他的都是html一樣。怎麼樣是不是和jsp差不多呢。

下面是安裝

相信對於很多關注javascript發展的同學來說,nodejs已經不是一個陌生的詞眼。有關nodejs的相關資料網上已經鋪天蓋地。由於它的高併發特性,造就了其特殊的應用地位。

這裡不想談太多的nodejs的相關資訊。只說一下,windows系統下簡單nodejs環境配置。

第一步:下載安裝檔案

這裡用的是 

第二步:安裝nodejs

下載完成之後,雙擊 node-v0.8.16-x86.msi,開始安裝nodejs,預設是安裝在C:\Program Files\nodejs下面

第三步:安裝相關環境

開啟C:\Program Files\nodejs目錄你會發現裡面自帶了npm,直接用npm安裝相環境既可

 進入node.js command prompt 命令視窗

進入nodejs 安裝目錄 C:\Program Files\nodejs

鍵入命令:cd C:\Program Files\nodejs 既可

現在開始安裝相關環境

鍵入命令:npm install express 回車等待安裝express........

鍵入命令:npm install jade 回車等待安裝jade........

鍵入命令:npm install mysql回車等待安裝mysql........

........安裝什麼元件,取決於環境搭建需求

預設情況下上述元件都是安裝在C:\Program Files\nodejs\node_modules資料夾下 這也是nodejs相關元件的自動查詢路徑

第四步:建立一個工程

 現在已經有express

express命令安裝在全域性才起作用!

所以express安裝的時候要用 npm install express -g

或者直接修改全域性路徑:

npm config set prefix "C:\Program Files\nodejs"

npm config set cache "C:\Program Files\nodejs\cache" (先建好cache目錄)

鍵入:express myapp (myapp是隨意起的工程名稱)

你會發現多了一個 C:\Program Files\nodejs\myapp 目錄

預設情況下:裡會自動建立 

這幾個檔案,不做解釋,相信有過開發經驗的同學都能一眼明瞭。

複製node_modules到myapp下面

環境搭建到此完工,下面做一個demo測試!

在myapp下新建helloworld.js

複製程式碼
var http = require("http");
http.createServer(function(request, response) {  
    response.writeHead(200, {"Content-Type": "text/plain"});  
    response.write("Hello World");  
    response.end();
}).listen(8888);
console.log("nodejs start listen 8888 port!");
複製程式碼

進入node.js command prompt 命令視窗,進入C:\Program Files\nodejs\myapp目錄

鍵入node helloworld.js

發現輸出 :

Hello World