最近几天想把毕设的基本工作做好。因为我和Parter做的是一个网购比价网站,他使用的是mongodb作为数据库,而我也不用怎么操作数据。我打算使用前后端分离来完成项目,后端获取数据,传递json数据到前端,前端展示这些数据就ok了。所以我的第一步当然是尝试从后端获取数据。Parter给我提供了一个远程mongdb的地址,工作开始。
Mongodb
数据库的安装
官网,找到下载页,选择合适的版本下载。安装时,自定义路径,我使用的是D:\mongodb。
创建文件
数据库安装完,需要自己手动建几个文件。在数据库根目录下,建两个目录data、logs,并在data下建db目录,在logs下建mongod.log文件。结构如下
1 | -mongodb |
启动服务器
- 第一种方法
首先进入bin目录,输入一下命令1
mongod.exe --dbpath d:\mongodb\data\db
如果执行成功,应该可以看到一堆不是报错的文字。
访问localhost:27017,可以看到有相应访问的文字提示,说明访问成功。
- 第二种方法
看到网上很多都是说修改config文件,却并不直说先自己建一个config文件。在根目录下建一个mongodb.conf
的文件,填入一下信息1
2
3
4
5
6dbpath=D:\mongodb\data\db #数据库路径
logpath=D:\mongodb\logs\mongod.log #日志输出文件路径
logappend=true #错误日志采用追加模式
journal=true #启用日志文件,默认启用
quiet=true #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
port=27017 #端口号 默认为27017
可以看到,里面定义了数据库的路径以及日志路径等信息,然后输入命令
1 | mongod --config "D:\mongodb\mongodb.conf" |
读取config文件来启动数据库。这次启动成功后,不会出现信息。再次访问localhost:27017,查看是否成功。
网上很多关于“将MongoDB服务器作为Windows服务运行”的教程,我试了一下,有点问题,然后我就不弄了,因为不是必需品。
Robomongo
一个管理mongodb的可视化工具,官网。
数据库操作
保持刚才启动数据库的命令行窗口,新开一个窗口,进入bin目录,输入mongo
这个命令,可以看到一些基本的信息。
继续输入
1 | use nodetest1 |
表明我们现在要使用nodetest1这个数据库,如果不存在这个数据库,则它会自动创建。下一步,创建数据
1 | db.usercollection.insert({ "username" : "testuser1", |
db表示我们正在使用的数据库nodetest1,usercollection表示数据库下的collecttion,mongodb中的collection相当于一般数据库的table表。回车会看到
1 | WriteResult({ "nInserted" : 1 }) |
输入一下代码:
1 | db.usercollection.find().pretty() |
可以看到清晰的数据展示。
若想要添加多条内容,可以
1 | newstuff = [{ "username" : "testuser2", |
当然,以上这些操作都可以在robomongo中直接可视化操作。
Express
后端使用node来连接数据库,这里我使用了Express来简单的进行demo测试。
安装
首先安装nodejs。
然后装express
1 | npm install express-generator -g |
再
1 | express demoname |
这时生成一个叫demoname的项目,进入该项目,npm install添加依赖。添加完成后启动。
1 | cd demoname |
在本地localhost:3000观察是否成功。
连接mongodb
monk
monk是我使用的第一种方法,因为到后面出现了一些问题,所以我现在使用的是mongoose这种方法。
先介绍使用monk吧。
- 添加依赖
打开刚才新建项目中的package.json文件,在原来的基础上加上mongo和monk的依赖,类似
1 | "dependencies": { |
重新npm install
- 修改app.js
打开项目中的app.js,添加新的代码
1 | var mongo = require('mongodb'); |
继续添加(一下这段代码好像要放在app.use('/', routes);
上面,否则会出错)
1 | //连接数据库到路由件 |
- 编辑index.js
打开项目目录下routes\index.js,为其添加一个路由
1 | /* GET Userlist page */ |
- 添加jade
这里express使用的是jade模板,在views目录下创建userlist.jade文件,内容如下
1 | extends layout |
重新npm start
,打开localhost:3000/userlist查看是否成功。
mongoose
使用这种方法,我终于解决了获取远程数据库数据的问题。之所以使用这种方法,是因为我使用monk时,当我连接远程的数据库,它老是提示我“端口不在范围内”的错误。
这次不是使用express项目来连接了,而是直接写几个文件就ok。
- 添加模块
首先新建一个目录,在项目目录下安装各模块
1 | npm install mongoose |
- 编辑app.js
在目录下自己创建一个app.js,添加以下内容
1 | var express = require('express'); |
在命令行窗口输入
1 | node app.js |
如果没有错误提示,说明启动成功。
访问localhost:3000,显示Hello, World
- 定义models
mongoose这玩意儿似乎还有schema,model,entity这些东西,不过我也没认真去看,毕竟我不做后台,只知道schema生成model,要用mongoose就要定义schema和model。
项目目录下创建models.js。内容如下
1 | var mongoose = require('mongoose'); |
我事先先看了一下远程数据库中的数据结构,然后定义如上。
- 添加路由
重新打开app.js,将其改为如下,
新添加
1 | var models = require('./models'); |
和
1 | app.get('/movie',function(req,res){ |
最终如下:
1 | var express = require('express'); |
此时我访问localhost:3000/movie,效果如下
使用jsonview插件的效果如下
谢天谢地,终于访问成功了,不枉我花了一两天来解决这玩意儿,只怪自己笨吧!。
在此,非常感谢Express + Mongoose 极简入门这篇博客,这是阅读了这篇博客,才让我有了头绪。
解决了这个问题,心中的郁闷感也渐渐消退,果然像某人说的一样,解决不了的问题先放一放,睡个觉醒来说不定就有头绪了。由衷地感激这位开导我的人!
此时1:39,晚安!
新添加内容:
最近因为安全问题,小伙伴重新建了数据库,还帮我换了用户名和密码,我发现直接再连的话是连不上的,需要添加用户名和密码,格式如下:
1 | mongoose.connect('mongodb://用户名:密码@数据库地址:端口号/数据库名); |