JavaScript >> Javascript 文檔 >  >> Node.js

Express.js 簡介:使用 Monk 和 MongoDB 的簡單 REST API 應用程序

為什麼?

查看 Google Analytics 統計數據後,我意識到需要簡短的 Node.js 教程和快速入門指南。這是對可能是最流行的(截至 2013 年 4 月)Node.js 框架 Express.js 的介紹。

Express.js — Node.js 框架

mongoui

這個應用程序是 mongoui 項目的開始。用 Node.js 編寫的 MongoDB 的 phpMyAdmin 對應物。目標是提供一個具有良好 Web 管理用戶界面的模塊。它將類似於 Parse.com、Firebase.com、MongoHQ 或 MongoLab,但沒有嘗試任何特定服務。為什麼我們必須輸入 db.users.findOne({'_id':ObjectId('...')}) 任何時候我們要查找用戶信息? MongoHub mac 應用程序的替代品很好(而且免費),但使用起來很笨拙,而且不是基於網絡的。

帶有 Express.js 和 Monk 的 REST API 應用程序

Ruby 愛好者喜歡將 Express 與 Sinatra 框架進行比較。它在開發人員如何構建應用程序方面同樣靈活。應用程序路由以類似的方式設置,即 app.get('/products/:id', showProduct); .目前 Express.js 的版本號為 3.1。除了 Express,我們還會使用 Monk 模塊。

我們將使用 Node.js 安裝通常附帶的 Node Package Manager。如果你還沒有它,你可以在 npmjs.org 上獲得它。

創建一個新文件夾和 NPM 配置文件 package.json ,裡面有以下內容:

{
  "name": "mongoui",
  "version": "0.0.1",
  "engines": {
    "node": ">= v0.6"
  },
  "dependencies": {
    "mongodb":"1.2.14",
    "monk": "0.7.1",
    "express": "3.1.0"
  }
}

現在運行 npm install 將模塊下載並安裝到 node_module 文件夾。如果一切順利,您會在 node_modules 中看到一堆文件夾 文件夾。我們應用程序的所有代碼都在一個文件中,index.js ,保持簡單愚蠢:

var mongo = require('mongodb');
var express = require('express');
var monk = require('monk');
var db =  monk('localhost:27017/test');
var app = new express();

app.use(express.static(__dirname + '/public'));
app.get('/',function(req,res){
  db.driver.admin.listDatabases(function(e,dbs){
      res.json(dbs);
  });
});
app.get('/collections',function(req,res){
  db.driver.collectionNames(function(e,names){
    res.json(names);
  })
});
app.get('/collections/:name',function(req,res){
  var collection = db.get(req.params.name);
  collection.find({},{limit:20},function(e,docs){
    res.json(docs);
  })
});
app.listen(3000)

讓我們逐段分解代碼。模塊聲明:

var mongo = require('mongodb');
var express = require('express');
var monk = require('monk');

數據庫和 Express 應用實例化:

var db =  monk('localhost:27017/test');
var app = new express();

告訴 Express 應用程序從公共文件夾加載和服務器靜態文件(如果有的話):

app.use(express.static(__dirname + '/public'));

主頁,又名根路由,設置:

app.get('/',function(req,res){
  db.driver.admin.listDatabases(function(e,dbs){
      res.json(dbs);
  });
});

get() 函數只需要兩個參數:字符串和函數。字符串可以有斜杠和冒號,例如 product/:id .該函數必須有兩個參數請求和響應。請求具有所有信息,例如查詢字符串參數、會話、標頭和響應是我們輸出結果的對象。在這種情況下,我們通過調用 res.json() 功能。 db.driver.admin.listDatabases() 正如您可能猜到的那樣,以異步方式給我們一個數據庫列表。

其他兩條路線以類似的方式使用 get() 設置 功能:

app.get('/collections',function(req,res){
  db.driver.collectionNames(function(e,names){
    res.json(names);
  })
});
app.get('/collections/:name',function(req,res){
  var collection = db.get(req.params.name);
  collection.find({},{limit:20},function(e,docs){
    res.json(docs);
  })
});

Express 方便地支持其他 HTTP 動詞,如 post 和 update。在設置發布路線的情況下,我們這樣寫:

app.post('product/:id',function(req,res) {...});

Express 還支持中間件。中間件只是一個帶有三個參數的請求函數處理程序:request , response , 和 next .例如:

app.post('product/:id', authenticateUser, validateProduct, addProduct);

function authenticateUser(req,res, next) {
  //check req.session for authentication
  next();
}

function validateProduct (req, res, next) {
   //validate submitted data
   next();
}

function addProduct (req, res) {
  //save data to database
}

validateProduct 和 authenticateProduct 是中間件。在大型項目中,它們通常被放入單獨的文件(或多個文件)中。

[旁注]

閱讀博客文章很好,但觀看視頻課程更好,因為它們更具吸引力。

許多開發人員抱怨 Node.js 上缺乏負擔得起的高質量視頻材料。觀看 YouTube 視頻會讓人分心,花 500 美元購買 Node 視頻課程很瘋狂!

去看看 Node University,它有關於 Node 的免費視頻課程:node.university。

[旁注結束]

在 Express 應用程序中設置中間件的另一種方法是使用 use() 功能。例如之前我們為靜態資產做了這個:

app.use(express.static(__dirname + '/public'));

我們也可以為錯誤處理程序這樣做:

app.use(errorHandler);

假設您安裝了 mongoDB,此應用程序將連接到它 (localhost:27017) 並顯示集合名稱和集合中的項目。啟動 mongo 服務器:

$ mongod

運行應用程序(保持 mongod 終端窗口打開):

$ node .

$ node index.js

要查看應用程序是否正常運行,請在帶有 JSONViewer 擴展的 Chrome 中打開 http://localhost:3000(以很好地呈現 JSON)。

湯姆漢克斯的極地特快


Tutorial JavaScript 教程
  1. 讓我們使用 React 和 JAMstack 構建自定義電子商務 - 第 1 部分

  2. 使用 Vue.js 路由器提供更好的用戶體驗🛣️

  3. 電子大冒險:第 70 集:CoffeeScript

  4. 如何使用 Node.js REPL

  5. 使用 serviceworker 進行離線緩存

  6. Web 應用性能調試實用指南

  7. 如何使用 Vue 製作星球大戰隨機報價應用程序

  1. 解開 JavaScript 控制台 API

  2. Async 和 Await 的基礎知識

  3. 在滿足勝利條件之前,如何只調用一次函數?

  4. 將 TinaCMS 與 Next.js 一起使用

  5. JS 面試問題 #1(組字謎)

  6. 中止 xmlhttprequest

  7. 如何構建進行 API 調用的 Chrome 擴展程序。

  1. 學習承諾簡介

  2. 具有主要功能的簡單文本編輯器(使用 Node.js)

  3. Firefox 新的多行控制台編輯器很棒

  4. VueUse - 使 Vue 3 值得升級的庫