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 相关文章推荐
一些mootools的学习资源
Feb 07 Javascript
javascript中的对象创建 实例附注释
Feb 08 Javascript
固定背景实现的背景滚动特效示例分享
May 19 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
Dec 16 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
Aug 17 Javascript
JavaScript必知必会(七)js对象继承
Jun 08 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
Oct 09 Javascript
Angularjs 创建可复用组件实例代码
Oct 09 Javascript
Angular2开发——组件规划篇
Mar 28 Javascript
Angularjs使用过滤器完成排序功能
Sep 20 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
Jan 02 Javascript
django js 实现表格动态标序号的实例代码
Jul 12 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
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
JS 毫秒转时间示例代码
2013/09/22 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
js如何验证密码强度
2020/03/18 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
批处理与python代码混合编程的方法
2016/05/19 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
linux环境下Django的安装配置详解
2019/07/22 Python
python 5个实用的技巧
2020/09/27 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
招商经理岗位职责
2013/11/16 职场文书
物控部经理职务说明书
2014/02/25 职场文书
公司领导班子对照材料
2014/08/18 职场文书
教师党员个人总结
2015/02/10 职场文书
物业工程部岗位职责
2015/02/11 职场文书
行政撤诉申请书
2015/05/18 职场文书
小学生大队委竞选稿
2015/11/20 职场文书
使用CSS定位HTML元素的实现方法
2022/07/07 HTML / CSS