Node.js搭建小程序后台服务


Posted in Javascript onJanuary 03, 2018

准备条件

一台服务器

SSL证书,小程序规定必须要https协议

服务器后台

Node.js
express
mongodb
pm2

下面以腾讯云主机(centos)为例

安装Node.js

yum install nodejs

也可以安装nvm,用nvm管理nodejs版本

安装git

yum install git

连接到远程代码库

以github为例:

配置用户信息

git config --global user.name youname
git config --global user.email youemail

生成ssh公钥

ssh -keygen -t rsa -C youemail

默认生成目录为 /root/.ssh
在目录中找到id_rsa.pub文件,复制里面的内容,在自己的github上添加ssh

安装mongodb和客户端shell

yum install mongodb-server mongodb -y

创建数据库文件存放目录

mkdir -p /data/mongodb
mkdir -p /data/logs/mongodb

启动mongodb数据库服务

mongod --fork --dbpath /data/mongodb --logpath /data/logs/youlog.log

注意:
如果在启动mongodb服务时在命令后面加上 --auth即会开启认证。
建议开启认证,如果不开会很容易被黑。

--port 12345可以改变数据库的端口号,默认是27017。

--fork是以守护进程的方式启动数据库服务。

--dbpath /data/mongodb 指定数据库文件存放的目录。

--logpath /data/logs/youlog.log 指定日志文件目录。

mongodb的配置文件默认在 /etc/mongod.conf

启动客户端shell

mongo  //启动mongodb客户端shell 默认连接test数据库

在shell里可以切换数据库连接,和进行相关操作。

在云服务器以守护进程的方式启动一次数据库服务之后,关闭终端,服务也不会被终止。所以下次不用再启动数据库服务,直接连接就可以。

关闭数据库服务

mongod --shutdown (--dbpath /data/mongodb)

如果启动时加了dbpath而且不是默认的/data/db ,则关闭数据库服务时也应加上dbpath。

创建https服务

npm init  //项目初始化

安装express

npm install express --save

实现简单的https服务器

const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();

let key = fs.readFileSync('youssl.key');
let cert = fs.readFileSync('youssl.crt');

let options = {
  key : key,
  cert : cert
};

const httpsServer = https.createServer(options,app);
httpsServer.listen(443, () => {
  console.log('listening 443 port');
});

app.get('/',(req, res, next) => {
  console.log('someone request');
});

.key和.cert文件为你的ssl认证文件,以腾讯云主机为例,可以有免费1年的ssl证书。

使用mongoose操作数据库

npm install mongoose --save
const mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1/dbname'); //连接数据库

const connection = mongoose.connection;
connection.once('open', (err) => {
  if(err){
    console.log('Database connection failure');
  }else{
    console.log('Database opened');
  }
});

const Schema = mongoose.Schema;

const YourSchema = new Schema({
  name : String,
  age : Number,
});

const yourModel = mongoose.model('yourtable', YourSchema); //在数据库中对应的表为yourtables

let yourDoc = new yourModel({
  name : 'yourname',
  age : 18,
});

注意 如果启动mongodb数据库服务时加上了--auth 则使用mongoose连接数据库时,要加上认证的账户

mongoose.connect('mongodb://youraccount:pwd@127.0.0.1/dbname');

mongodb与关系型数据库的对应关系

Schema相当于表的结构,可以预定义文档的字段类型,不能进行数据库操作。 Modle可以进行一系列数据库操作,相当于表。Model的实例就相当于表的一行。

使用pm2

安装pm2

npm install  -g pm2

启动应用

pm2 start app.js

Javascript 相关文章推荐
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
Jan 11 Javascript
jQuery .tmpl(), .template()学习资料小结
Jul 18 Javascript
JS定时刷新页面及跳转页面的方法
Jul 04 Javascript
js中数组Array的一些常用方法总结
Aug 12 Javascript
jquery prop的使用介绍及与attr的区别
Dec 19 Javascript
node.js Web应用框架Express入门指南
May 28 Javascript
下雪了 javascript实现雪花飞舞
Aug 02 Javascript
jQuery事件绑定on()与弹窗实现代码
Apr 28 Javascript
Vue.js每天必学之方法与事件处理器
Sep 06 Javascript
JS 实现计算器详解及实例代码(一)
Jan 08 Javascript
Vue.js实战之组件之间的数据传递
Apr 01 Javascript
Vue Router中应用中间件的方法
Aug 06 Javascript
基于js文件加载优化(详解)
Jan 03 #Javascript
jQuery 实现左右两侧菜单添加、移除功能
Jan 02 #jQuery
js 取消页面可以选中文字的功能方法
Jan 02 #Javascript
js阻止默认右键的下拉菜单方法
Jan 02 #Javascript
webpack实用小功能介绍
Jan 02 #Javascript
js最简单的双向绑定实例讲解
Jan 02 #Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
Jan 02 #Javascript
You might like
PHP在不同页面间传递Json数据示例代码
2013/06/08 PHP
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
两行代码轻松搞定JavaScript日期验证
2016/08/03 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
Vue.js用法详解
2017/11/13 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
如何使用python进行pdf文件分割
2019/11/11 Python
python flask搭建web应用教程
2019/11/19 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
通过cmd进入python的步骤
2020/06/16 Python
CSS3实现滚动条动画效果代码分享
2016/08/03 HTML / CSS
HTML5标签小集
2011/08/02 HTML / CSS
欧尚俄罗斯网上超市:Auchan俄罗斯
2018/05/03 全球购物
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
物业经理求职自我评价
2013/09/22 职场文书
生育关怀行动实施方案
2014/03/26 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
司法所长先进事迹
2014/06/02 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
化验室岗位职责
2015/02/14 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
小学运动会入场词
2015/07/18 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技