有时候自己想实现一点玩意,苦于没有后台大佬,自己一个前端狗也搞不定,今天终于不用仍受后台大佬了,自己来做一个后端。
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
:
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服务器一台不够,也需要几台,那么又怎么处理。
看来,后台也是一个坑啊。。。
不过,好在,我们现在的需求,这个架构暂时是满足的,就这么部署着吧,以后可以优化~~过早优化是万恶之源哦~~