前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >极简配置express+MongoDB

极简配置express+MongoDB

原创
作者头像
brzhang
修改2019-04-18 16:54:08
2.4K0
修改2019-04-18 16:54:08
举报
文章被收录于专栏:玩转全栈玩转全栈

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

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之后,相关文件会写到这里:

我检查了下,貌似是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服务器一台不够,也需要几台,那么又怎么处理。

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、技术选型
  • 2、express部署
  • 3、部署MongoDB
  • 4、总结
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档