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 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.js
和index.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,看到下面的界面:
截图
好的!就像我们现在看到的画面,我们已经将我们的路由文件和视图文件组织起来了,现在我们做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可以看到以下的界面:
截图
我们现在成功的从数据库中调出了数据,并且让他显示在网页中。
�特别说明: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 ,你就能看见如下视图:
截图
点击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数据库中写入数据。你现在已经是全栈开发人员了,或许不是一个有经验的开发人员,但这只是暂时的。
如果你是从头到尾学下来的这篇教程,那么你对路由和视图,从数据库读取内容,更新数据库的内容都已经有很好的了解了。这些都是你要开发要学会的。
第五部分——下一阶段
从这里开始,你有无数种方向可以继续。你可以查询使用Mongoose,这是一个专门为Node/Express操作Mongo的一个包。这可能比Monk好用。你也可以看看Stylus,这是一个CSS预处理系统。你可以google“Node Express Mongo”看看有什么新的发现。
我希望这个教程可以帮到你。写下这个教程是因为在我开始使用Node的时候,并没有发现有适合这个程度的教程,如果你通过这个教程学到了新的东西,我也很高兴。
好消息:我的另一篇教程已经完成了:点击查阅:使用NODE.JS EXPRESS和MONGODB制作一个简单的RESTFUL网站程序
扩展阅读:MEAN stack值得一看。
感谢
我欠很多帮助我的人的感谢。你们是最棒的!
- Raquel “Rockbot” Velez (@rockbot), whose video presentation “Front-End Development in Node.js” from jqConf Portland got me interested enough to finally dig my thumbs into Node. She is a talented web developer, gives a fun talk, and also writes code for robots!
- Azat Mardanov, whose article “Intro to Express.js: Simple REST API app with Monk and MongoDB” helped me a ton with establishing a basic understanding of how all of these different pieces talk to each other.
- Jason Everett, whose article “A Sample App with Node.js, Express and MongoDB – Part 1”helped me pick up some important knowledge.
- Ciaran Jessup, whose article “Blog rolling with mongoDB, express and Node.js” over at How To Node was another good resource!
关于作者
Christopher Buecheler是一个自学成才的博学者,是一个极其“自大”的非学院派万事通。白天是一个三藩市的一个创业公司的一个前端开发者,晚上是一个流行小说家,现在已经有4本书出版了。他还是一个得过奖的业余调酒师,为Primer杂志写过鸡尾酒的文章以及拥有一个关于鸡尾酒的博客。他酿造过啤酒,喜欢看NBA、NFL有时候看MLB。他和他了不起的法国老婆以及两个妻子住在普罗维登斯的罗德岛。他想要学习法语,我们祝愿他只需要从矩阵下载下来就好了。