欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

零基礎(chǔ)搭建Node.js、Express、Ejs、Mongodb服務(wù)器及應(yīng)用開(kāi)發(fā)入門

 更新時(shí)間:2014年12月20日 09:36:18   投稿:junjie  
這篇文章主要介紹了零基礎(chǔ)搭建Node.js、Express、Ejs、Mongodb服務(wù)器及應(yīng)用開(kāi)發(fā)入門,本文在windows8系統(tǒng)下完成本教程,其它系統(tǒng)也可參考,需要的朋友可以參考下

本文改自非魚的《【翻譯】前端開(kāi)發(fā)人員入門指南,從零開(kāi)始搭建Node.js, Express, Jade, Mongodb服務(wù)器》,之所以把Jade換成Ejs,是因?yàn)槲矣X(jué)得ejs更符合WEB編程人員的習(xí)慣,更確切說(shuō)應(yīng)該是更符合PHP、ASP程序員的使用習(xí)慣。好了,廢話不多說(shuō),直接開(kāi)始教程。

第1部分 – 15分鐘安裝

如果你真的是從零開(kāi)始學(xué),那就花點(diǎn)時(shí)間先把環(huán)境搭建起來(lái)吧。這不難,我用的是Win8,所以這看上去跟那些用Mac和Ubuntu或者其它*nix系統(tǒng)的教程有點(diǎn)區(qū)別,不過(guò)大致是一樣的。

第1步 – 安裝Node.JS

這很容易,進(jìn)入Node.js官方網(wǎng)站,點(diǎn)擊綠色的大Install按鈕,它會(huì)自動(dòng)檢測(cè)你的系統(tǒng)并給你一個(gè)正確的安裝文件的下載。(如果沒(méi)有,點(diǎn)擊Download按鈕選擇你需要的下載)。運(yùn)行安裝程序,這樣就好了。你已經(jīng)裝上了Node.js,和NPM(Node包管理器)可以讓你很容易的安裝各種有用的包到Node里。

第2步 – 安裝Express

現(xiàn)在我們已經(jīng)讓Node跑起來(lái)了,我們還需要一些東西讓我們能夠?qū)嶋H創(chuàng)建一個(gè)可用的站點(diǎn)。下面我們需要安裝Express,這是一個(gè)把Node從一個(gè)原始的應(yīng)用變成一個(gè)更像我們平時(shí)使用的Web服務(wù)器的框架。我們需要從Express開(kāi)始,因?yàn)槲覀冃枰峁┑膕caffolding功能。我們輸入這么個(gè)命令:

復(fù)制代碼 代碼如下:

c:\node>npm install -g express

這樣Express就被正確的安裝到我們的Node里了,并且已經(jīng)設(shè)為全局可用的。你會(huì)在命令行窗口看到一堆輸出,大部分是http 304和GET請(qǐng)求,這是正常的。Express應(yīng)該已經(jīng)裝好并可用了。

第3步 – 創(chuàng)建一個(gè)Express項(xiàng)目

我們準(zhǔn)備使用Express和Ejs,但是不是用來(lái)做CSS預(yù)處理的。我們會(huì)手寫一些CSS。我們要用Ejs或者其它的模板引擎來(lái)處理Node和Express的數(shù)據(jù)。如果你會(huì)HTML的話,Ejs并不難。只要記住你需要集中精神,否則事情可能很容易出錯(cuò)。

現(xiàn)在在同一個(gè)命令行窗口中輸入:

復(fù)制代碼 代碼如下:

c:\node>express –sessions nodetest1

回車,你會(huì)看到這樣一堆東西:
復(fù)制代碼 代碼如下:

C:\node>express --sessions nodetest1
create : nodetest1
create : nodetest1/package.json
create : nodetest1/app.js
create : nodetest1/routes
create : nodetest1/routes/index.js
create : nodetest1/routes/user.js
create : nodetest1/views
create : nodetest1/views/index.ejs
create : nodetest1/public/images
create : nodetest1/public/javascripts
create : nodetest1/public
create : nodetest1/public/stylesheets
create : nodetest1/public/stylesheets/style.css

install dependencies:
$ cd nodetest1 && npm install

run the app:
$ node app

第4步 – 編輯依賴項(xiàng)

好了,我們現(xiàn)在有一些基本項(xiàng)目結(jié)構(gòu),但是還沒(méi)完。你會(huì)注意到express的安裝過(guò)程在你的nodetest1目錄里創(chuàng)建了一個(gè)叫package.json的文件,用文本編輯器打開(kāi)這個(gè)文件,它應(yīng)該是長(zhǎng)這樣的。

復(fù)制代碼 代碼如下:

{
    "name": "application-name",
    "version": "0.0.1",
    "private": true,
    "scripts": {
        "start": "node app.js"
    },
    "dependencies": {
        "express": "3.4.8",
        "ejs": "*"
    }
}

這是一個(gè)標(biāo)準(zhǔn)的JSON格式文件,表明了我們的應(yīng)用和它的依賴。我們需要添加一點(diǎn)東西。比如對(duì)mongodb和Monk的調(diào)用。把dependencies部分改成這樣:
復(fù)制代碼 代碼如下:

"dependencies": {
    "express": "3.4.8",
    "ejs": "*",
    "mongodb": "*",
    "monk": "*"
}

第5步 – 安裝依賴

現(xiàn)在我們定義好了項(xiàng)目的依賴項(xiàng)。*號(hào)會(huì)告訴NPM“安裝最新版本”?;氐矫钚写翱?,進(jìn)入nodetest1目錄,輸入:

復(fù)制代碼 代碼如下:

C:\node\nodetest1>npm install

它會(huì)輸出一堆東西。這是因?yàn)樗苯幼x取我們修改過(guò)的JSON文件,識(shí)別其中的依賴項(xiàng),并安裝必須的文件。當(dāng)NPM安裝完成以后,你應(yīng)該有了一個(gè)node_modules目錄,其中包含我們的項(xiàng)目所需要的所有依賴文件。

現(xiàn)在我們有了一個(gè)完整功能的App,并且可以運(yùn)行了。我們?cè)囋嚳窗?!確保你的當(dāng)前目錄是nodetest1目錄,輸入:

復(fù)制代碼 代碼如下:

C:\node\nodetest1>node app.js

回車后你會(huì)看到:
復(fù)制代碼 代碼如下:

Express server listening on port 3000

太棒了。打開(kāi)瀏覽器,輸入http://localhost:3000,你應(yīng)該能看到Express的一個(gè)歡迎頁(yè)面了。

現(xiàn)在你已經(jīng)運(yùn)行起了你自己的Node JS WebServer,帶有Express引擎和Ejs HTML模板引擎。不是很難啊,對(duì)吧?

第2部分 – 好了,我們來(lái)寫“Hello, World!”吧

打開(kāi)你常用的文本編輯器或者其它IDE,我個(gè)人喜歡用Sublime Text。打開(kāi)你的nodetest1目錄下的app.js,這個(gè)文件就是你的App的核心了。你應(yīng)該會(huì)看到這樣的內(nèi)容:

復(fù)制代碼 代碼如下:

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

這個(gè)只是定義了一堆JavaScript變量并指向了一些包和依賴,node函數(shù),和routes。Routes(路由)相當(dāng)于MVC中Models和Controllers的集合,它負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求并且也包含一些處理邏輯。Express已經(jīng)為我們創(chuàng)建好了所有這些東西,我們現(xiàn)在先忽略u(píng)ser route,開(kāi)始寫最頂層的route(由routes\index.js控制)。

在上面的這個(gè)文件的最后寫上:

復(fù)制代碼 代碼如下:

var app = express();

這一句至關(guān)重要。它實(shí)例化了Express并賦值給我們的app變量。接下來(lái)的內(nèi)容都要使用這個(gè)變量來(lái)配置一堆Express的參數(shù)。繼續(xù)輸入:
復(fù)制代碼 代碼如下:

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

這里設(shè)置了端口,尋找views的目錄,用什么模板引擎來(lái)處理這些views,和一些其它的東西。還要注意最后一行,它告訴Express把public/目錄下的靜態(tài)文件作為頂層目錄的文件來(lái)托管。比如你的圖片目錄存放在c:\node\nodetest1\public\images\里,但是實(shí)際訪問(wèn)地址是http://localhost:3000/images/。

注意:你需要把這一行

復(fù)制代碼 代碼如下:

app.use(express.bodyParser());

改成
復(fù)制代碼 代碼如下:

app.use(express.urlencoded());

這是為了忽略一些App運(yùn)行過(guò)程中Node窗口里面的警告信息。主要是一些Express和它的插件未來(lái)可能的修改。如果你不做這個(gè)修改,程序運(yùn)行時(shí)你會(huì)收到一堆某某函數(shù)即將過(guò)期的警告。

然后增加:

復(fù)制代碼 代碼如下:

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

這樣在開(kāi)發(fā)過(guò)程中你可以做一些錯(cuò)誤檢查。

繼續(xù)增加:

復(fù)制代碼 代碼如下:

app.get('/', routes.index);
app.get('/users', user.list);

這會(huì)告訴路由當(dāng)一個(gè)URI請(qǐng)求到達(dá)時(shí)使用哪個(gè)Route來(lái)處理。注意user變量是在前面定義的,并被map到了/routes/user.js,我們會(huì)調(diào)用這個(gè)文件中定義的list函數(shù)。這里可以顯示用戶列表。

繼續(xù)增加:

復(fù)制代碼 代碼如下:

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

最后,創(chuàng)建一個(gè)http server并且啟動(dòng)它。這樣就差不多了。

(以上內(nèi)容在新的express生成的模板里是完整的,不需要自己寫進(jìn)去)

現(xiàn)在,我們寫點(diǎn)有用的。我們不會(huì)直接在我們的index頁(yè)面里寫“Hello World!”,我們借這個(gè)機(jī)會(huì)學(xué)習(xí)一下如何使用route路由,同時(shí)學(xué)習(xí)一下Ejs引擎是如何工作的。在上面的app.js文件的app.get()這一段的后面添加一行:

app.get('/helloworld', routes.helloworld);
如果這時(shí)候你在命令行窗口按ctrl+C結(jié)束app.js進(jìn)程再重啟,然后用瀏覽器訪問(wèn)http://localhost:3000/helloworld,你會(huì)得到一個(gè)很激動(dòng)人心的node錯(cuò)誤和命令行窗口中的一堆崩潰提示。這是因?yàn)槲覀冞€沒(méi)有修改路由去處理這個(gè)路徑。來(lái)做這個(gè)吧。在你的編輯器里,進(jìn)入routes目錄,找到index.js,打開(kāi)它。它看上去應(yīng)該是這樣的:

復(fù)制代碼 代碼如下:

/*
 * GET home page.
 */

exports.index = function(req, res){
  res.render('index', { title: 'Express' });
};


我們來(lái)添加一個(gè)新頁(yè)面。我比較喜歡給每一個(gè)一級(jí)目錄創(chuàng)建一個(gè)獨(dú)立的route文件,但是現(xiàn)在我們還不打算在views下面給helloworld建一個(gè)完整的目錄結(jié)構(gòu),所以我們暫時(shí)先使用index路由。在這個(gè)文件的最后添加:
復(fù)制代碼 代碼如下:

exports.helloworld = function(req, res){
  res.render('helloworld', { title: 'Hello, World!' });
};

它會(huì)負(fù)責(zé)處理這個(gè)URI請(qǐng)求,但是現(xiàn)在我們還沒(méi)有一個(gè)實(shí)際的頁(yè)面讓res.render去render,這是Ejs負(fù)責(zé)的工作。進(jìn)入你的views目錄,打開(kāi)index.ejs,把它另存為helloworld.ejs文件。現(xiàn)在它看上去應(yīng)該是這樣的:
復(fù)制代碼 代碼如下:

<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
</body>
</html>

應(yīng)該很容易理解。
保存文件。在命令行窗口中按ctrl+c中斷app.js,然后輸入node app.js重新啟動(dòng)它。提示:當(dāng)你修改一個(gè)ejs模板文件的時(shí)候,你不需要重啟服務(wù)器。但是當(dāng)你改了一個(gè)js文件的時(shí)候,比如app.js或者一個(gè)路由js文件,就必須要重啟服務(wù)器才能看到效果了。

服務(wù)器啟動(dòng)后,注服務(wù)器打開(kāi)http://localhost:3000/helloworld,應(yīng)該能看到這個(gè)漂亮的界面了:

好了!現(xiàn)在我們有了路由可以處理我們的模板,看到了我們想要的效果。接下來(lái)我們來(lái)做一些Model(數(shù)據(jù)層)。

第3部分 – 創(chuàng)建數(shù)據(jù)庫(kù)并讀取數(shù)據(jù)

第1步 – 安裝Mongodb

我們先關(guān)掉文本編輯器,回到命令行窗口。先用瀏覽器,打開(kāi)http://mongodb.org/,下載Mongo。點(diǎn)擊主菜單里的下載鏈接,找到適合你的系統(tǒng)的版本。對(duì)于64位win8,下載64-bit *2008R2+版本。下載后是個(gè)zip文件,解壓到c:\mongo或者c:\program files\mongo或者隨便什么地方,這不重要。我們把數(shù)據(jù)保存在我們的nodetest1目錄里。

第2步 – 運(yùn)行Mongod和mongo

在我們的nodetest1目錄里創(chuàng)建一個(gè)子目錄data,然后在命令行窗口中進(jìn)入你的mongodb目錄的bin目錄里,輸入:

復(fù)制代碼 代碼如下:

mongod –dbpath c:\node\nodetest1\data

你會(huì)看到mongo服務(wù)器啟動(dòng)了,第一次啟動(dòng)需要一點(diǎn)時(shí)間,因?yàn)樗枰A(yù)分配一些硬盤空間和一些其它的任務(wù)。當(dāng)它提示”[initandlisten] waiting for connections on port 27017″的時(shí)候,就搞定了。沒(méi)有什么別的需要做的了,服務(wù)器已經(jīng)在運(yùn)行了。現(xiàn)在你需要另外打開(kāi)一個(gè)命令行窗口,進(jìn)入mongo目錄的bin目錄中,輸入
復(fù)制代碼 代碼如下:

mongo

你會(huì)看到一些類似這種提示:
復(fù)制代碼 代碼如下:

c:\mongo>mongo
MongoDB shell version: 2.4.5
connecting to: test

這時(shí)候如果你看一下mongod的窗口,你會(huì)看到提示一個(gè)連接已接入。我們接下來(lái)會(huì)使用這個(gè)命令行的客戶端去手工處理一下我們的數(shù)據(jù)庫(kù),不過(guò)這對(duì)我們的Web站點(diǎn)并不是必須的。

第3步 – 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)

不用擔(dān)心上面的連接到test的提示。那只是當(dāng)你沒(méi)有指定數(shù)據(jù)庫(kù)時(shí)mongo默認(rèn)的一個(gè)數(shù)據(jù)庫(kù),它甚至不會(huì)創(chuàng)建這個(gè)名叫test的數(shù)據(jù)庫(kù),除非你增加一條記錄進(jìn)去。我們創(chuàng)建一個(gè)自己的數(shù)據(jù)庫(kù)吧。在mongo的命令行窗口中,輸入:

復(fù)制代碼 代碼如下:

use nodetest1

除非我們插入一些數(shù)據(jù)進(jìn)去,否則它也不會(huì)創(chuàng)建這個(gè)數(shù)據(jù)庫(kù)。

第4步 – 添加一些數(shù)據(jù)

我最喜歡的MongoDB的特性就是它使用JSON作為數(shù)據(jù)結(jié)構(gòu),這就意味著我對(duì)此非常的熟悉。如果你不熟悉JSON,先去讀點(diǎn)相關(guān)資料吧,這超出了本教程的范圍。

我們添加一些數(shù)據(jù)到collection中。在這個(gè)教程里,我們只有一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù),留侯 username和email兩個(gè)字段。我們的數(shù)據(jù)看起來(lái)是這個(gè)樣子的:

復(fù)制代碼 代碼如下:

{
    "_id" : 1234,
    "username" : "cwbuecheler",
    "email" : "cwbuecheler@nospam.com"
}

你可以創(chuàng)建你自己的_id字段的值,不過(guò)我覺(jué)得最好還是讓mongo來(lái)做這件事。它會(huì)為每一條記錄創(chuàng)建一個(gè)唯一的值。我們看看它是怎么工作的。在mongo的窗口中,輸入:
復(fù)制代碼 代碼如下:

db.usercollection.insert({ “username” : “testuser1″, “email” : “testuser1@testdomain.com” })

重要提示:db就是我們上面創(chuàng)建的nodetest1數(shù)據(jù)庫(kù),usercollection就是我們的collection,相當(dāng)于一張數(shù)據(jù)表。注意我們不需要提前創(chuàng)建這個(gè)collection,它會(huì)在第一次使用的時(shí)候自動(dòng)創(chuàng)建。好了,按下回車。如果一切順利,你會(huì)看到……什么也沒(méi)有。這可不太好,輸入:
復(fù)制代碼 代碼如下:

db.usercollection.find().pretty()

如果你好奇的話,pretty方法會(huì)格式化輸出內(nèi)容,添加換行縮進(jìn)。它應(yīng)該會(huì)顯示:
復(fù)制代碼 代碼如下:

{
    "_id" : ObjectId("5202b481d2184d390cbf6eca"),
    "username" : "testuser1",
    "email" : "testuser1@testdomain.com"
}

當(dāng)然,你得到ObjectID應(yīng)該是不一樣的,mongo會(huì)自動(dòng)生成一個(gè)。如果你以前使用過(guò)JSON接口的服務(wù),現(xiàn)在是不是會(huì)覺(jué)得,哇,在web里調(diào)用這個(gè)應(yīng)該很簡(jiǎn)單吧!嗯,你說(shuō)對(duì)了。

提示:作為正式服務(wù),你應(yīng)該不希望所有的數(shù)據(jù)都存在最頂層。關(guān)于mongodb數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì),多看看Google吧。

現(xiàn)在我們有了一條數(shù)據(jù),我們多添加點(diǎn)吧。在mongo窗口中輸入:

復(fù)制代碼 代碼如下:

newstuff = [{ "username" : "testuser2", "email" : "testuser2@testdomain.com" }, { "username" : "testuser3", "email" : "testuser3@testdomain.com" }]
db.usercollection.insert(newstuff);

注意,我們通過(guò)一個(gè)數(shù)據(jù)一次傳遞了多條數(shù)據(jù)到collection。多簡(jiǎn)單!再使用上面的find命令你會(huì)看到這三條數(shù)據(jù)。

現(xiàn)在我們來(lái)整合前面搭建的web服務(wù)器和數(shù)據(jù)庫(kù)。

第5步 – 把mongo連接到node

現(xiàn)在我們來(lái)建立一個(gè)頁(yè)面,把數(shù)據(jù)庫(kù)里的記錄顯示成一個(gè)漂亮的表格。這是我們準(zhǔn)備生成的HTML內(nèi)容:

復(fù)制代碼 代碼如下:

<ul>
    <li><a href="mailto:testuser1@testdomain.com">testuser1</a></li>
    <li><a href="mailto:testuser2@testdomain.com">testuser2</a></li>
    <li><a href="mailto:testuser3@testdomain.com">testuser3</a></li>
</ul>

我知道這不太科學(xué),不過(guò)你理解就好。我們只是為了建立一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)讀寫程序,不是為了建立一個(gè)完整的網(wǎng)站。首先,我們往app.js(我們的程序的心臟和靈魂)里添加一點(diǎn)內(nèi)容,這樣才能接連上mongodb。打開(kāi)c:\node\nodetest1\app.js,在頂部你會(huì)看到:
復(fù)制代碼 代碼如下:

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

在它下面添加:
復(fù)制代碼 代碼如下:

// New Code
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/nodetest1');

這幾行會(huì)告訴app我們需要連接MongoDB,我們用Monk來(lái)負(fù)責(zé)這個(gè)連接,我們數(shù)據(jù)庫(kù)位置是localhost:27017/nodetest1。注意27017是mongodb的默認(rèn)端口,如果因?yàn)槟承┰蚰阈薷牧硕丝冢涗涍@里也要跟著改?,F(xiàn)在看文件的底部:
復(fù)制代碼 代碼如下:

app.get('/', routes.index);
app.get('/users', user.list);
app.get('/helloworld', routes.helloworld);

下面添加一行:
復(fù)制代碼 代碼如下:

app.get('/userlist', routes.userlist(db));

這一行告訴app當(dāng)用戶訪問(wèn)/userlist路徑的時(shí)候,我們需要把db變量傳遞到userlist路由。但是我們現(xiàn)在還沒(méi)有userlist路由,現(xiàn)在就去創(chuàng)建一個(gè)吧。

第6步 – 讀取mongo中的數(shù)據(jù)并顯示

用你的編輯器打開(kāi)c:\node\nodetest1\routes\idnex.js,里面有index和hello world兩個(gè)route,現(xiàn)在我們來(lái)添加第三個(gè):

復(fù)制代碼 代碼如下:

exports.userlist = function(db) {
    return function(req, res) {
        var collection = db.get('usercollection');
        collection.find({},{},function(e,docs){
            res.render('userlist', {
                "userlist" : docs
            });
        });
    };
};

好吧,事情變得有點(diǎn)復(fù)雜了。這里首先定義了一個(gè)function,接收我們傳過(guò)來(lái)的db變量,然后調(diào)用一個(gè)跟前面兩個(gè)route一樣的page render。我們告訴它需要讀取usercollection,做一個(gè)查找,返回的數(shù)據(jù)保存在docs變量中。一旦我們讀取到了內(nèi)容,就調(diào)用render來(lái)渲染userlist模板頁(yè)面,把獲取到的docs變量作為模板引擎中的userlist變量傳遞進(jìn)去。

接下來(lái)建立我們的Ejs模板。在views目錄下打開(kāi)index.ejs,另存為userlist.ejs,然后把它的HTML修改成這樣:

復(fù)制代碼 代碼如下:

<!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>

保存文件,重啟node服務(wù)器。希望你還記得怎么重啟。打開(kāi)瀏覽器,訪問(wèn)http://localhost:3000/userlist,你應(yīng)該能看到這樣的界面:

點(diǎn)提交按鈕,你會(huì)看到一個(gè)“can't post to /adduser”的錯(cuò)誤。我們來(lái)修正它。

第2步 – 創(chuàng)建你的數(shù)據(jù)庫(kù)處理函數(shù)

跟以前一樣,我們修改app.js,然后是route文件,然后是ejs模板。不過(guò),這里不需要ejs模板,因?yàn)槲覀僷ost以后會(huì)跳轉(zhuǎn)。在app.js的app.get()這一段的后面添加一行:

復(fù)制代碼 代碼如下:

app.post('/adduser', routes.adduser(db));

注意這里是app.post,不是app.get了。來(lái)設(shè)置route吧。回到routes/index.js,創(chuàng)建我們的數(shù)據(jù)庫(kù)插入函數(shù)。這個(gè)比較大,所以我建議你寫好注釋。
復(fù)制代碼 代碼如下:

exports.adduser = function(db) {
    return function(req, res) {

        // Get our form values. These rely on the "name" attributes
        var userName = req.body.username;
        var userEmail = req.body.useremail;

        // Set our collection
        var collection = db.get('usercollection');

        // Submit to the DB
        collection.insert({
            "username" : userName,
            "email" : userEmail
        }, function (err, doc) {
            if (err) {
                // If it failed, return error
                res.send("There was a problem adding the information to the database.");
            }
            else {
                // If it worked, set the header so the address bar doesn't still say /adduser
                res.location("userlist");
                // And forward to success page
                res.redirect("userlist");
            }
        });

    }
}


顯然在真正的項(xiàng)目里你還需要做很多驗(yàn)證,比如用戶名和email不允許重復(fù),email地址必須符合一定的格式規(guī)則。不過(guò)現(xiàn)在我們先不管這些。你可以看到,當(dāng)插入數(shù)據(jù)庫(kù)完成時(shí),我們讓用戶跳轉(zhuǎn)回userlist頁(yè)面,他們應(yīng)該在那里看到新插入的數(shù)據(jù)。

這是最好的方式嗎?

第3步 – 連接數(shù)據(jù)庫(kù),寫入數(shù)據(jù)

確保你的mongod在運(yùn)行!然后重啟你的node服務(wù)器。用瀏覽器打開(kāi)http://localhost:3000/newuser。現(xiàn)在我們填入一些內(nèi)容,點(diǎn)擊提交按鈕。如果順利,我們應(yīng)該回到了userlist頁(yè)面,并且看到了剛剛添加的新數(shù)據(jù)。

現(xiàn)在我們正式的完成了使用Node.js,Exress,Ejs讀取和寫入Mongodb數(shù)據(jù)庫(kù),我們已經(jīng)是牛X的程序員了。

恭喜你,真的。如果你認(rèn)真的看完了這篇教程,并且很認(rèn)真的學(xué)習(xí)而不只是復(fù)制代碼,你應(yīng)該對(duì)routes, views,讀數(shù)據(jù),寫入數(shù)據(jù)有了完整的概念。這是你用來(lái)開(kāi)發(fā)任何其它完整的Web網(wǎng)站所需要的一切知識(shí)點(diǎn)!不管你怎么想,我覺(jué)得這真挺酷的。

第5部分 – 下一步

現(xiàn)在開(kāi)始,你擁有無(wú)限的可能。你可以看看Mongoose, 另一個(gè)處理MongoDB數(shù)據(jù)庫(kù)的Node包。它比Monk更大一些,功能也更豐富。你還可以看看Stylus,一個(gè)Express的CSS引擎。你可以Google一下Node Express Mongo Tutorial,看看接下來(lái)的內(nèi)容。好好學(xué)習(xí),天天向上。

我希望這篇教程能夠有所幫助,我寫這個(gè)是因?yàn)楫?dāng)我開(kāi)始學(xué)習(xí)的時(shí)候我真的很需要這樣的東西,但是又真的找不到。如果你已經(jīng)看到了這里,非常感謝!

相關(guān)文章

  • Thinkjs3新手入門之添加一個(gè)新的頁(yè)面

    Thinkjs3新手入門之添加一個(gè)新的頁(yè)面

    Thinkjs 是一個(gè)快速、簡(jiǎn)單的基于MVC和面向?qū)ο蟮妮p量級(jí)Node.js開(kāi)發(fā)框架,下面這篇文章主要給大家介紹了關(guān)于Thinkjs3新手入門之添加一個(gè)新的頁(yè)面的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-12-12
  • Node.js中的CommonJS模塊化規(guī)范詳解

    Node.js中的CommonJS模塊化規(guī)范詳解

    這篇文章主要介紹了Node.js中的CommonJS模塊化規(guī)范,本文主要介紹了?CommonJS?規(guī)范在?Node?中的簡(jiǎn)單應(yīng)用,主要就是導(dǎo)入和導(dǎo)出模塊,需要的朋友可以參考下
    2023-02-02
  • Node.js靜態(tài)文件服務(wù)器改進(jìn)版

    Node.js靜態(tài)文件服務(wù)器改進(jìn)版

    這篇文章主要介紹了Node.js靜態(tài)文件服務(wù)器改進(jìn)版的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Node與Python 雙向通信的實(shí)現(xiàn)代碼

    Node與Python 雙向通信的實(shí)現(xiàn)代碼

    最簡(jiǎn)單粗暴的通信方式是 Nodejs調(diào)用一下 Python 腳本,本文詳細(xì)介紹了Nodejs與Python 雙向通信的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Nodejs+angularjs結(jié)合multiparty實(shí)現(xiàn)多圖片上傳的示例代碼

    Nodejs+angularjs結(jié)合multiparty實(shí)現(xiàn)多圖片上傳的示例代碼

    這篇文章主要介紹了Nodejs+angularjs結(jié)合multiparty實(shí)現(xiàn)多圖片上傳的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • npm報(bào)錯(cuò):request to httpsregistry.npm.taobao.org failed, reason certificate has expired的解決方案

    npm報(bào)錯(cuò):request to httpsregistry.npm.taobao.org 

    這篇文章主要介紹了npm報(bào)錯(cuò):request to httpsregistry.npm.taobao.org failed, reason certificate has expired的解決方案,文中有詳細(xì)的解決方案,需要的朋友可以參考下
    2024-03-03
  • nodejs中的讀取文件fs與文件路徑path解析

    nodejs中的讀取文件fs與文件路徑path解析

    這篇文章主要介紹了nodejs中的讀取文件fs與文件路徑path解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 詳解基于Node.js的HTTP/2 Server實(shí)踐

    詳解基于Node.js的HTTP/2 Server實(shí)踐

    HTTP/2目前已經(jīng)逐漸的在各大網(wǎng)站上開(kāi)始使用,這篇文章主要介紹了詳解基于Node.js的HTTP/2 Server實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Node.js包管理器Yarn的入門介紹與安裝

    Node.js包管理器Yarn的入門介紹與安裝

    大家都知道在yarn發(fā)布之前,所有Nodejs開(kāi)發(fā)者用的都是npm包管理工具,而npm工具存在挺多難以忍受的詬病,包括安裝速度慢、每次都要在線重新安裝等問(wèn)題,而yarn也是為了解決npm當(dāng)前所存在的問(wèn)題而出現(xiàn)的。本文給大家介紹了包管理器Yarn,以及安裝方法。下面來(lái)一起看看。
    2016-10-10
  • Node.js模塊封裝及使用方法

    Node.js模塊封裝及使用方法

    這篇文章主要為大家詳細(xì)介紹了Node.js模塊封裝及使用方法,感興趣的朋友可以參考一下
    2016-03-03

最新評(píng)論