一个使用NODE JS, EXPRESS, JADE和MONGODB的极简开发教程

30分钟内学会让你的程序运行起来,再用30分钟让你的数据库运行起来

作者:Christopher Buecheler
翻译:lvsjack
You can find/fork the entire sample project on GitHub

介绍

市面上有无数的教程教你怎么使用Node.js制作“Hello world”程序,实话说,这种了解式的开发一点也不好,我们看看有没有更好的教程。

在我的经验中,称得上好的教程还需要走很远的路。从显示”Hello,World“到完成一个完整的带有评论的博客系统�的教程要读者经过了大量的折腾摆弄,并且�常常会把一大块的代码突然放到你的面前。这样的学习方法不是很好,我个人比较喜欢使用有大量中间步骤的方法,我想不仅仅是只有我一个人有这样的想法吧。

不错,这里有一个好的消息!经过我的�大量工作,现在我建立了一个运行在Node.js的项目,这使用了Express框架,�以及Jade HTML预处理程序,使用了MongoDB管理数据库。我能够读取和写入数据,还能做更多的事情。

我会把我知道的东西都告诉你,不过这里假设你是一个前端开发人员,你已经知道了HTML5/CSS3/Javascript,这样的话我在后面的教程中就不解释了。

你的程序会看起来不错,他能连接数据库,他能获得内容,能处理内容。之后会将数据储存在数据库。我会解释代码,以及怎么去写,而不是给你一堆代码函数让你去看。我们会从空白到安装,再到数据驱动的网站程序,这里会使用你完全能看懂的语言去完成。我们会在60分钟内完成这些内容,让我们开始吧。

第一部分——用15分钟来完成安装

如果你是从零开始的,那我们可能需要一点时间来把所有东西组织起来,这一点都不难,我使用Windows8,这会和使用Mac和Ubuntu或者其他的*nix系统有点区别,但是原理都一样。

第一步——安装NODE.JS

这极其简单。进入Node.js网站,点击安装,网站会检测你所使用的系统,然后给出合适的安装方法(如果没有出现,那么点击下载,然后下载一个你需要的)。运行这个安装器,你就安装了Node.js,同时NPM也已经安装在你的电脑,这是一个包管理器,可以便捷的添加很不错的东西。

  • 打开命令行界面
  • 指向你存放工程文件的目录(教程中使用C:\node)。

第二步——安装EXPRESS GENERATOR

现在你已经让你的Node运行起来了,我们需要把剩下的东西生成一个可以运行的网站。要做到这样,我们需要安装Express,这是一个让Node更像一个网站服务器的框架。我们首先从Express-Generator开始,这和Express不同,这是一个可以生成express网站骨架的脚手架程序,在你的命令行界面输入以下的代码:

npm install -g express-generator

这个生成器应该会自动安装,这个包会安装到主NPM安装文件夹,现在使用我们的生成器来制作网站的脚手架。

第三步——建立一个EXPRESS项目

我们将使用Express和Jade,我们现在会直接使用CSS,不用Stylus CSS预处理器。如果你会HTML,Jade就不是很难学,只要把注意力集中到缩进上不然就会出错。如果你想要使用HTML作为你的模板引擎,你可以使用EJS来代替。

一个关于缩进的提示:课程中所有的缩进都是4个空格,尽管代码有时会自动生成2个缩进。如果你想使用2个或者3个缩进或者tabs(我经常这么使用),这没有关系。但是,缩进一定要连贯不然就会出错。一定要小心使用。举例如下:

body
    h1
    ul
        li

和以下就完全不同

body
    h1
        ul
            li

第二个代码中ul被包含在h1中,这不是我们想要的效果。

总而言之,在终端输入下面的代码:

express nodetest1

你能看到如下的信息:

express nodetest1

   create : nodetest1
   create : nodetest1/package.json
   create : nodetest1/app.js
   create : nodetest1/public
   create : nodetest1/public/javascripts
   create : nodetest1/public/images
   create : nodetest1/routes
   create : nodetest1/routes/index.js
   create : nodetest1/routes/users.js
   create : nodetest1/public/stylesheets
   create : nodetest1/public/stylesheets/style.css
   create : nodetest1/views
   create : nodetest1/views/index.jade
   create : nodetest1/views/layout.jade
   create : nodetest1/views/error.jade
   create : nodetest1/bin
   create : nodetest1/bin/www

   install dependencies:
     $ cd nodetest1 && npm install

   run the app:
     $ DEBUG=nodetest1:* npm start

第四步——编辑依赖

现在我们有了基本的结构了,但还有些事情没做。你看到express-generator生成一个叫package.json的文件。打开这个文件:

C:\NODE\NODETEST1\PACKAGE.JSON

{
  "name": "nodetest1",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.15.1",
    "cookie-parser": "~1.4.3",
    "debug": "~2.2.0",
    "express": "~4.13.4",
    "jade": "~1.11.0",
    "morgan": "~1.7.0",
    "serve-favicon": "~2.3.0"
  }
}

这个基本的JSON文件描述了我们的程序以及依赖。我们需要添加几样东西。特别要使用MongoDB和Monk,把我们的依赖内容写成这样:

"dependencies": {
    "body-parser": "~1.15.1",
    "cookie-parser": "~1.4.3",
    "debug": "~2.2.0",
    "express": "~4.13.4",
    "jade": "~1.11.0",
    "morgan": "~1.7.0",
    "serve-favicon": "~2.3.0",
    "mongodb": "^1.4.4",
    "monk": "^1.0.1"
  }

记得在serv-favicon行后添加逗号,不然我们就会安装不成功。

第五步——安装依赖

现在我们告诉系统我们需要的依赖了,我们后面添加的两个依赖都是已经指定了版本号(“^”符号),这样是为了能够和教程相配合,如果你想要使用最新的版本,你可以自便。

回到命令行界面,指向nodetest1文件夹,输入:

npm install

之后在命令行界面中看到输出了很多东西,这是因为通过读取JSON文件将其中的依赖自动安装,当安装完成后,你能看到文件夹中多了一个node_modules的文件夹,这里面包含了所有需要的依赖。

到现在我们已经有了一个完全能运行的一个app了。在我们开始之前,我们需要准备我们的一个文件夹用来设置我们的数据库文件,继续在我们的nodetest1文件夹里输入:

mkdir data

这个文件夹就是我们用来放置MongoDB数据。如果没有这个文件夹,数据库服务器就会在待会的运行中卡住。我们现在对数据库不用做任何事情,先测试一下网站服务,输入以下:

npm start

提醒:在以前的课程中我们使用了“node app.js“,我们现在使用�的另外一种构建系统。不过在这篇教程中,这没什么关系。使用“npm start“和以前的使用方法都是一样的。不管怎么说,回车后,你能看到:

> nodetest1@0.0.0 start /Users/Jack/Sites/NODE/nodetest1
> node ./bin/www

如果一切都良好的情况下,打开浏览器输入http://localhost:3000 ,你就能看到以下的界面:

《一个使用NODE JS, EXPRESS, JADE和MONGODB的极简开发教程》 截图

你现在就已经有了运行Node JS的网站,并且使用Express引擎和Jade HTML预处理程序,不是很难吧?

第二部分——做一个“HELLO, WORLD”程序

使用你最喜欢的编辑器或者IDE,我个人喜欢使用Sublime Text多点。打开你nodetest1文件夹的app.js文件,这个文件有点像程序的核心文件,我们来一点一点看这个文件:

C:\NODE\NODETEST1\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 routes = require('./routes/index');
var users = require('./routes/users');

这段代码生成了一些绑定了包、依赖、node函数、以及路由的JavaScript变量。路由就像是指挥交通以及包含程序逻辑的模块组合和控制器。回到我们开始的项目,Express为我们�生成了很多东西(user.jsindex.js)。我们先跳过user.js,先使用顶层的路由文件(index.js):

C:\NODE\NODETEST1\APP.JS

var app = express();

这段代码很重要, 这是一个Express实例化并赋值给变量的代码。下一段,我们就要大量使用这个变量来配置Express。

C:\NODE\NODETEST1\APP.JS

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// 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('/', routes);
app.use('/users', users); 

首先告诉程序视图文件的位置,使用哪种视图引擎来渲染页面。之后使用一些方法让程序能够组织运行起来。app.use(express.static(path.join(__dirname, 'public')));这行代码告诉静态文件的位置,并且让静态文件夹作为顶层结构,例如照片的位置在c:\node\nodetest1\public\images,可以使用http://localhost:3000/images的链接进入。

// 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 handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});

这是错误句柄在开发环境下或者生产环境下处理不同的情况。我们其实不用太注意这两者的区别,当如果你在开发环境下出现问题,肯定希望能有更多的提示信息,但是如果在生产环境下,我们不希望用户看到太多不该看到的内容。

module.exports = app;

Node的核心就是你可以�把所有的模块都导出成对象,这样可以在程序的任意地方调用。我们的主程序就导出了自己的app对象。

现在,我们来做点事情。�把“Hello,World”显示在index页面中。虽然我排斥“Hello World”这种把戏,但这样做我们能对Jade和路由有点基本的了解。

我们在app.js中添加一个新的app.use。找到这段代码:

app.use('/', routes);
app.use('/users', users);

这行命令告诉Express路由的使用方法。一般情况下,我会为了程序中不同的作用制作不同的路由文件。例如,user路由可能就是添加用户,删除用户,更新用户等等的路由文件。如果一个叫location的路由文件,可能就是添加、编辑、删除以及显示地址数据(根据你的程序的需要)的路由文件。在这个例子中,我要在index路由中完成所有的事情。这意味着你可以忽略user路由文件。

记住Express脚手架已经定义了相应的路由文件,我们只要添加“helloworld”方法到路由,使默认的页面重新渲染。在你的编辑器中,打开你的路由文件夹,找到index.js,打开:

C:\NODE\NODETEST1\ROUTES\INDEX.JS

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,之后,绑定“router”变量到Express路由方法,再之后当HTTP使用根目录(“/”)的时候为其渲染页面。最后我们导出我们的路由方法到程序中。

我们�可以简单的复制这样的方法到另外的页面,让我们开始吧,在文件的最下面, module.exports = router;的上面,添加这个代码:

C:\NODE\NODETEST1\ROUTES\INDEX.JS

/* GET Hello World page. */
router.get('/helloworld', function(req, res) {
    res.render('helloworld', { title: 'Hello, World!' });
});

当我用输入…/helloworld路径的时候,使用helloworld视图文件渲染页面,但是现在我们还没有制作视图文件。到Jade出场的时候了。打开views文件夹,打开index.jade。先将文件保存成helloworld.jade

C:\NODE\NODETEST1\VIEWS\HELLOWORLD.JADE

现在看这些代码:

extends layout

block content
  h1= title
  p Welcome to #{title}  

这个文件中,首先extends layout,使用了layout.jade�布局模板,之后在content内容区使用了header和paragraph。title作为一个变量,在之前的index.js路由文件已经设定好参数内容。现在我们继续把内容修改成:

p Hello, World! Welcome to #{title}

保存文件,如果程序还在运行中我们输入ctrl-c to退出服务,然后输入:

npm start

重启服务后,现在提醒一句,修改jade文件不需要重启服务,但是只要修改js文件,例如app.js后,需要重启服务。

所以,重启服务后,指向 http://localhost:3000/helloworld,看到下面的界面:

《一个使用NODE JS, EXPRESS, JADE和MONGODB的极简开发教程》 截图

好的!就像我们现在看到的画面,我们已经将我们的路由文件和视图文件组织起来了,现在我们做modeling的部分。

第三部分——制作我们的数据库并从中读取内容

第一�步——安装MONGODB

打开http://mongodb.org/ 下载Mongo。如果是Windows8可能会默认安装到Program Files文件夹中。没关系,教程中是安装到C:Mongo下。Mongo本身很小,我们要把我们的数据存储到nodetest1文件夹中。

从temp文件夹中的bin文件夹复制Mongo到你想要的位置。这样你就完成了Mongo的安装,现在我们来做点东西。

第二步——运行MONGOD和MONGO

在nodetest1文件夹中,建立一个叫data的文件夹。进入安装的MongoDB的位置(C:\mongo),再进入”bin”文件夹。从这个文件夹输入以下代码:

COMMAND C:\MONGO\BIN*

mongod --dbpath c:\node\nodetest1\data\

现在我们能看到Mongo服务已经启动起来了。如果是第一次启动的话,这要花费点时间在一些配置上。一旦出现waiting for connections on port 27017这行内容,说明mongo已经启动了。现在你需要打开第二个命令行界面,继续在你的Mongo安装文件夹,输入:

mongo

你能看到如下的内容:

MongoDB shell version: 3.2.5
connecting to: test

已经能看到连接已经建立了,现在MongoDB已经运行起来了,这个客户端工作在数据库上,现在没必要运行这个网站,你都可以关闭这个窗口,所以只有mongod后台程序运行就可以了。

第三步——建立数据库

不要担心”connecting to: test” ,这是Mongo默认情况,我们现在没有指定是因为现在还不是很重要。如果没有添加一个数据的话,其实都没有“test”这个数据库。我们就制作一个我们自己的collection。在Mongo控制台中,输入

use nodetest1

现在我们使用的就是”nodetest1″数据库。就像“test”一样,这个数据库其实都不存在因为没有任何数据。我们就使用mongo客户端开始添加数据。

第四步——添加数据

我最喜欢MongoDB的地方就是使用JSON格式,这让我能很快熟悉。如果你对JSON不是很熟悉,你需要�看些文章,这是教程范围外的内容了。

让我们开始添加一些内容。我们先添加一个简单的包含用户名和email地址的数据库。我们的数据格式就像这样:

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

你可以添加你自己的_id字段,但是最好让Mongo�自己来,Mongo会在collention的每个顶部提供一个唯一的identifier。我们开始添加看看什么情况:

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

重要信息:db就是数据库的意思,就是我们上面提到的“nodetest1“。”usercollection”部分就是我们的collection。我们没有专门制作”usercollection”,那是因为第一次会自动添加。回车,我们看到

WriteResult({ "nInserted" : 1 })

输入以下代码:

db.usercollection.find().pretty()

.pretty()可以是数据更漂亮的显示,就像下面:

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

可以看到你的ObjectID和我的不一样,这是因为Mongo自动生成这些内容。这就是客户端全部的内容,如果你以前使用过JSON,你就会觉得这其实一点也不难。

关于DB结构的提醒:我们以后肯定不可能都从顶层存储内容,如果要学习的话,Google就是你的好朋友。

我们现在添加了一组内容,现在我们要添加更多的内容,在你的Mongo控制台中,输入以下内容:

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

我们可以传递一个包含多个对象的数组到collection。使用db.usercollection.find()将会显示以下3条记录:

{
    "_id" : ObjectId("57777b939fa7848321e2c4a4"),
    "username" : "testuser1",
    "email" : "testuser1@testdomain.com"
}
{
    "_id" : ObjectId("577780989fa7848321e2c4a5"),
    "username" : "testuser2",
    "email" : "testuser2@testdomain.com"
}
{
    "_id" : ObjectId("577780989fa7848321e2c4a6"),
    "username" : "testuser3",
    "email" : "testuser3@testdomain.com"
}

现在我们和之前建好的网站连接起来。

第五步——使MONGO和NODE连接起来

现在我们新建一个可以展示我们数据库内容的页面。这就是我们要生成的页面:

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

我们现在只是做一个简单的数据库读取和写入的小功能,不是制作一个全面的网站。现在要做的是我们要添加几行新的内容到app.js中,这样可以和MongoDB实例连接。打开:C:\node\nodetest1\app.js:

C:\node\nodetest1\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 mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/nodetest1');

这些代码告诉我们的程序要准备连接MongoDB,我们使用Monk来实现,我们的数据库位置在localhost:27017/nodetest1,注意到27017是MongoDB默认的端口。如果你改变了这个端口,请同时替换这里的内容。下面找到这行内容:

app.use('/', routes);
app.use('/users', users);

这些app.use使用的就是Express的中间件。简短�可以这样:使程序使用自定义功能。在使用之前我们先设置我们的路由件,所以我们可以这样使用。

//连接数据库到路由件
app.use(function(req,res,next){
    req.db = db;
    next();
});

重要提示:如果你把这段代码放在app.use(‘/’, routes);下面,你的程序就没法运行。

我们已经定义了“db”在我们添加Mongo和Monk的时候。db就是一个Monk连接对象。添加这个功能到app.use,这样我们就在每一个HTTP request添加了这个对象。这样性能可能不是很优化,为了课程我们暂时就这么做。

这样,你的整个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 mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/nodetest1');

var routes = 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', 'jade');

// 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(function (req, res, next) {
    req.db = db;
    next();
});

app.use('/', routes);
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 handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function (err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function (err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});

module.exports = app;

下一步我们要调整我们的路由这样就能显示数据库中的数据。

第六步——Mongo调出数据并显示出来

用编辑器打开C:\node\nodetest1\routes\index.js。在index路由文件中,除了index路由,helloworld路由,让我们添加第三个路由情况:

/* GET Userlist page */
router.get('/userlist', function (req, res) {
    var db = req.db;
    var collection = db.get('usercollection');
    collection.find({},{},function (e, docs) {
        res.render('userlist', {
            "userlist": docs
        });
    });
});

这么看起来好像有点复杂。从http request取出“db”对象,之后通过db获取收据并填充“docs”变量。然后像其他两个路由一样渲染页面。

基本上,我们告诉程序我们要使用的collection(‘usercollection’),然后执行一个find方法,把返回的结果赋值给“docs”。一旦得出这个”docs”,我们用它来渲染填充userlist变量对象(对应的Jade模板使用)。

下一步让我们建立对应的Jade模板。指向C:\node\nodetest1\views\,打开index.jade。把这个文件保存为userlist.jade文件,然后编辑HTML,让他看起来就像下面这样:

C:\NODE\NODETEST1\VIEW\USERLIST.JADE

extends layout

block content
    h1.
        User List
    ul
        each user, i in userlist
            li
                a(href="mailto:#{user.email}")= user.username

这段代码的意思就是我们要使用一个叫userlist的变量对象,之后从这个对象中的每一次entry(每次循环使用’user’)获得相应的email,username值,然后放在html中。我们同时还有“i”来计数。

所有的东西都已设置好了,保存文件,我们重启node服务。还记得怎么重启吗?回到命令行界面,指向C:\node\nodetest1\ ,输入ctrl-c 退出服务,然后输入:

npm start

现在打开 http://localhost:3000/userlist可以看到以下的界面:

《一个使用NODE JS, EXPRESS, JADE和MONGODB的极简开发教程》 截图

我们现在成功的从数据库中调出了数据,并且让他显示在网页中。

�特别说明:You could very easily change your userlist view from an Express-driven web page complete with Jade template to a plain old JSON response. You could then access this with AJAX and manipulate it on the client-side, with jQuery for example, instead of on the server side. 实际上,我们准备写一个完整的页面来说明这个情况,在文章的末尾你能找到这个链接。

先让我们完成这篇内容。

第四部分——最后的目标:在数据库中写入数据

向数据库中书写数据没有想象中的难,只要使用POST代替GET的路由。

第一步——新建一个数据输入框组

我们准备随便建立一个输入框组(过时的,丑陋的),但是在建立之前,我们先写一些javascript——一个关于添加用户表单的路由。打开/routes/index.js,在module.exports前面添加以下代码:

/* GET New User page */
router.get('/newuser', function(req, res){
    res.render('newuser', {title: 'Add New User'});
});

现在我们需要一个视图模板。打开/views/index.jade,保存成newuser.jade,然后用以下代码替换:

C:\NODE\NODETEST1\VIEWS\NEWUSER.JADE

extends layout

block content
    h1= title
    form#formAddUser(name='adduser', method='post',action='/adduser')
        input#inputUserName(type="text", placeholder="username", name="username")
        input#inputUserEmail(type="text", placeholder="useremail", name="useremail")
        button#btnSubmit(type="submit") submit

我们已经制作了一个ID为formAddUser的表单,方法是post,action是adduser。之后是两个输入框和一个按钮。

如果你重启node服务器之后,去这个网址: http://localhost:3000/newuser ,你就能看见如下视图:

《一个使用NODE JS, EXPRESS, JADE和MONGODB的极简开发教程》 截图

点击submit,会出现404错误。我们现在来修复这个情况。

第二步——建立数据库方法

这和user list是差不多的制作方法。我们不�需要新建另一个app.use命令,因为我们已经在每一次的request中首先使用了数据库调用。这样就可以连接新的任何路由,现在我们来添加一个新的路由到adduser。

回到我们的/routes/index.js,我们来建立我们的插入内容的方法。在module.exports代码上面写一下代码:

C:\NODE\NODETEST1\ROUTES\INDEX.JS

/*POST to Add User Service */
router.post('/adduser', function(req, res){

    //设置数据库参数
    var db = req.db;

    //从表单中获得数据
    var username = req.body.username;
    var userEmail = req.body.useremail;

    //设置collection
    var collection = db.get('usercollection');

    //Submit to the DB
    collection.insert({
        "username": username,
        "email": userEmail
    },function(err, doc){
        if(err){
            res.send("There was a problem adding the information to the database.");
        }else{
            res.redirect("userlist");
        }
    });
});

当然实际情况下,你可能会有大量的检验工作要做,例如你可以检验是否有重复的用户名以及检验邮箱地址是否合法。当成功添加数据后,我们回到userlist页面,就能看到新添加的用户已经出现在页面中。

现在我们添加一些数据!

第三步——连接并添加数据到数据库

首先确定mongod是在运行当中。然后在命令行中重启node。

npm start

如果�一切正常的话,回到浏览器输入http://localhost:3000/newuser,在表单中填写新的数据之后选择submit,你就能看到这个页面:

《一个使用NODE JS, EXPRESS, JADE和MONGODB的极简开发教程》 截图

现在我们已经能够使用Node.js、Express和Jade向MongoDB数据库中写入数据。你现在已经是全栈开发人员了,或许不是一个有经验的开发人员,但这只是暂时的。

如果你是从头到尾学下来的这篇教程,那么你对路由和视图,从数据库读取内容,更新数据库的内容都已经有很好的了解了。这些都是你要开发要学会的。

第五部分——下一阶段

从这里开始,你有无数种方向可以继续。你可以查询使用Mongoose,这是一个专门为Node/Express操作Mongo的一个包。这可能比Monk好用。你也可以看看Stylus,这是一个CSS预处理系统。你可以google“Node Express Mongo”看看有什么新的发现。

我希望这个教程可以帮到你。写下这个教程是因为在我开始使用Node的时候,并没有发现有适合这个程度的教程,如果你通过这个教程学到了新的东西,我也很高兴。

好消息:我的另一篇教程已经完成了:点击查阅:使用NODE.JS EXPRESS和MONGODB制作一个简单的RESTFUL网站程序

扩展阅读MEAN stack值得一看。

感谢

我欠很多帮助我的人的感谢。你们是最棒的!

关于作者

Christopher Buecheler是一个自学成才的博学者,是一个极其“自大”的非学院派万事通。白天是一个三藩市的一个创业公司的一个前端开发者,晚上是一个流行小说家,现在已经有4本书出版了。他还是一个得过奖的业余调酒师,为Primer杂志写过鸡尾酒的文章以及拥有一个关于鸡尾酒的博客。他酿造过啤酒,喜欢看NBA、NFL有时候看MLB。他和他了不起的法国老婆以及两个妻子住在普罗维登斯的罗德岛。他想要学习法语,我们祝愿他只需要从矩阵下载下来就好了。

    原文作者:lvsjack1
    原文地址: https://www.jianshu.com/p/3b045636bcec
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞