极简配置express+MongoDB

2019-04-18 16:54:08 浏览数 (1)

有时候自己想实现一点玩意,苦于没有后台大佬,自己一个前端狗也搞不定,今天终于不用仍受后台大佬了,自己来做一个后端。

1、技术选型

为什么我要选择express MongoDB呢,这个问题还要定位到我具体的这个想法,我目前是想做一个小程序,这方面的化,我没有采用原生的小程序来写,我是使用的一个叫做uni-app的框架来做的,我动机不是那么纯粹,我只是先想用小程序验证一下想法,然后往原生上迁移。而uni-app 这个框架很强大,是支持一套代码打包成小程序,原生的。具体框架的介绍可以参考这里。

玩过vue的你会发现使用uni-app写页面的方式和vue没有啥区别,他无非就是多了一些平台相关的api而已,因此,js无疑是你需要狠狠的去用的一个东东,那么,基于一致性原则,js相关的server框架有哪些呢,或者说nodejs,搜下自然而依然就搜到了这个鼎鼎大名的express,那么这当然不是我选择他的唯一理由。在选择使用express之前,我对比过express和koa,最后发现koa的社区相对较弱,因此怕遇到坑怕不出来才选择了express。

然后,光有一个server是不行的,没有数据库的存储相当于没有粮食供给,是玩不长的,于是乎我有了解一下数据库,搜了下发现MongoDB比较切合我的实际需求,当然也不是没有可以替代的,比如从这里了解到nano也是很贴合我的需求,主要是因为他存储使用json数据,而我,整好打算用json作为整个前后端通信的协议,同样MongoDB用的人更多,社区更加强大,因此我选择了mongodb。

ok,技术选型已经过到这里了,下面就是怎么部署出来了。

2、express部署

我这里使用的webstorm帮我傻瓜式的生成了一个项目:

注意到那里有一个模板的选择,因为我们使用的是json输出,并没有输出html这种文档,所以这里无关简要,我就选默认的了,感兴趣的同学可以了解下这个模板技术。

另外,如果你是发烧友,当然可以使用命令行来生成一个express工程了。

生成的方式,请参考这:其实也很傻瓜

生成好之后,我们注释和修改一些代码:

把view引擎注释掉,我们是输出json格式,并不需要加载view引擎。

修改一下routes目录下的index.js:

没错,我们要的是输出个Hello World!

自此,一个server就已经部署好了,但是Hello World是吃不饱的,因此,我们下一步要部署数据库了。

3、部署MongoDB

DB实际上是高级点的文件存储系统,现代化的db一般都支持网络访问,那么,很显然,DB必然会有服务端,首先第一步是MongoDB服务端的安装。

主要是参考官方文档的这里,因为我只是个人在mac上玩下,所以,我选择的mac社区版本。

代码语言:javascript复制
brew install mongodb-community@4.0

按照教程上的说法,安装ok之后,相关文件会写到这里:

  • the configuration file (/usr/local/etc/mongod.conf)
  • the log directory path (/usr/local/var/log/mongodb)
  • the data directory path (/usr/local/var/mongodb)

我检查了下,貌似是ok的。

然后就是启动啦:

代码语言:javascript复制
brew services start mongodb-community@4.0

这样就启动了,剩下的问题就是我们改如何在node中访问MongoDB。

第一步,安装node访问MongoDB的客户端,在你express的工程根目录下执行即可。

代码语言:javascript复制
npm install mongodb --save

第二步,写代码测试了。

以下是我的代码,db.js

代码语言:javascript复制
const MongoClient = require('mongodb').MongoClient;

// Connection URL
const url = 'mongodb://localhost:27017';

// Database Name
const dbName = 'unsure';

// Use connect method to connect to the server
let listFeeds = function (callback) {
    MongoClient.connect(url, {useNewUrlParser: true}, function (err, client) {
        console.log("Connected successfully to server");
        const db = client.db(dbName);
        const collection = db.collection('feeds');
        collection.find({}).toArray(function (err, docs) {
            callback(docs);
            client.close();
        });
    });
};

let insertFeed = function (callback) {
    MongoClient.connect(url, {useNewUrlParser: true}, function (err, client) {
        console.log("Connected successfully to server");
        const db = client.db(dbName);
        const collection = db.collection('feeds');
        collection.insertOne({
            'imageUrl': 'https:www.baidu.com',
            'userid': 234234
        }, {}, function (err, result) {
            callback(result)
            client.close();
        });
    });
};

module.exports.listFeeds = listFeeds;
module.exports.insertFeeds = insertFeed;

随后就是在业务逻辑中调用了:

看看效果:

put

get

至此,整个express MongoDB的部署已经完毕。

MongoDB确实非常好用,可以看到,我在使用的过程中,既没有去创建database,也没有创建数据表,直接就开干了,有点类似读写文件,没有就给你创建一样。

这里也不禁想到一个问题,如果后面需要加字段,如何处理,答案是自己家就是了,用过mysql的人肯定只要,这个时候你需要取操作表结构了,需要alter table..,而MongoDB这些完全不需要你管。

4、总结

也许,不就的将来,随着业务量的上涨,我直连db操作在性能上无法忍受,我可能要接入cache,比如使用redis,

代码语言:javascript复制
npm install redis

也许,一台web 服务器一台更本不够,需要好几台,那么,怎么处理,参考https://www.jianshu.com/p/be66a52d2b9b

或者说db服务器一台不够,也需要几台,那么又怎么处理。

看来,后台也是一个坑啊。。。

不过,好在,我们现在的需求,这个架构暂时是满足的,就这么部署着吧,以后可以优化~~过早优化是万恶之源哦~~

0 人点赞