腾讯云npm?腾讯云服务器官网首页下载
nodejs怎么部署到腾讯云服务器上
到小鸟云购买云服务器
作为一个穷逼+不熟悉服务器配置的菜鸟。选了最便宜的套餐: CPU: 1核/内存: 1024 MB/带宽:1Mbps/操作系统: CentOS
7.0购买环节会设置 ssh登陆密码,记下密码。登陆到小鸟云,查看购买的实例。注意公网 IP,下一步会用到
2.登陆服务器 sudo ssh你的服务器ip地址
提示输入mac的密码,提示输入服务器密码。输入后连接成功并显示服务器信息,如下:
登陆服务器后。这里对于我这个 Linux菜鸟有个大坑………就是 Linux系统常见的目录结构和文件放置区域。使用 root
用户身份登陆后,会直接进入到下图红色箭头标出的 root目录下。先 cd..跳转到上一层,再 ls-a
,就可以看到类似下图的目录结构了。
3.安装 node和 mongodb
node–编译后二进制文件应在/usr/local/bin/node下 mongodb–安装在/usr/local/mongodb下
下面就一步一步来,首先升级CentOS
yum-y update1
升级后,跳转到/usr/local/src,这个文件夹通常用来存放软件源代码
cd/usr/local/src1
下载 nodejs代码,也可以使用scp命令直接上传,因为下载实在太慢了。
wget 注*根据最新版本号为准12
解压
tar-xzvf node-v0.12.5.tar.gz1
进入解压后的文件夹
cd node-v0.12.51
执行配置脚本来进行编译预处理
./configure1
编译源代码
make//注*这个时间可能会很久12
当编译完成后,需要使之在系统范围内可用,
编译后的二进制文件将被放置到系统路径,默认情况下,Node二进制文件应该放在/user/local/bin/node文件夹下
make install1
安装 express和 forever,这两个模块都推荐 global安装
npm-g install express forever1
建立超级链接,不然 sudo node时会报“command not found”
sudo ln-s/usr/local/bin/node/usr/bin/nodesudo ln-s/usr/local/lib/node
/usr/lib/nodesudo ln-s/usr/local/bin/npm/usr/bin/npmsudo ln-s
/usr/local/bin/node-waf/usr/bin/node-wafsudo ln-s/usr/local/bin/forever
/usr/bin/forever12345
Nodejs到这里就基本安装完成了。
下面来安装mongodb
软件安装位置:/usr/local/mongodb数据存放位置:/var/mongodb/data
日志存放位置:/var/mongodb/logs
首先下载安装包
cd/usr/localwget
解压安装包,重命名文件夹为mongodb
tar zxvf mongodb-linux-x86_64-2.6.0.tgzmv mongodb-linux-x86_64-2.6.0
mongodb12
创建数据和日志存放目录
mkdir/var/mongodbmkdir/var/mongodb/datamkdir/var/mongodb/logs123
打开rc.local文件,添加CentOS开机启动项:
vim/etc/rc.d/rc.local1
将mongodb启动命令追加到本文件中,让mongodb开机自启动:
/usr/local/mongodb/bin/mongod--dbpath=/var/mongodb/data--logpath
/var/mongodb/logs/log.log-fork12
关闭 vim后,直接手动启动mongodb
/usr/local/mongodb/bin/mongod--dbpath=/var/mongodb/data--logpath
/var/mongodb/logs/log.log-fork12
看到类似的信息,说明已启动成功。我在这里发了个傻,以为26308是port号,导致后面设置port时折腾了好久。其实这里的 forked
process和 port号是两个东西,这个是程序本身在Server上的进程。
forked process: 263081
启动mongo shell
cd/usr/local/mongodb/bin/./mongo12
在 mongo shell中创建管理员及数据库
use admin//admin数据库db.createUser({user:
"用户名",pwd:"登陆密码",roles:["userAdminAnyDatabase"]
//超级管理员})use databaseFoo//nodeapp要连接的数据库db.createUser({user:
"用户名",pwd:"登陆密码",roles:["readWrite"]
//读写权限})12345678910111213
到这里 mongodb基本已经安装设置完成了。具体数据的迁移导入可自行研究。
4.配置及启动node app
我们把 nodeapp的程序放在/home下
js如何连接和操作腾讯云mysql数据库
首先是登陆腾讯云,登陆之后可以领取新手礼包,如图
进入云产品->数据库->CDB for MYSQL->立即选购,选购最低配的可用礼包抵扣使用一个月,购买完成
主页->右上角产品管理->使用中的数据库,这时我们会看见一个实例,首先我们进入管理页面对实例进行一些基本的设置
实例名可以随意更改,外网地址必须开启,否则我们就不能在自己的项目中和本地访问云数据库。进入账号管理页面修改自己的root密码,然后点击右上角的登录数据库
登陆完成之后如下图
这个和本地客户端操作基本相同,我就不详细阐述了
二、使用一个demo来说明如何操作云mysql数据库
1.在实例上上新建一个为nodejs的数据库,然后新建一个为employee的表,新建四个字段 name sex age email除了年龄为int其它的全部为varchar格式
2.新建一个TimLiu的文件夹,打开cmd,cd TimLiu,初始化项目npm init,按照它的提示一步一步的操作即可,安装mysql模块,npm insitall mysql,这个模块的作用主要是连接mysql数据库。
3.新建一个model.js文件,
var mysql= require(‘mysql’);
var connection= mysql.createConnection({
host:'',
user:'root',
password:'123abc',
database:' nodejs',
port:6445
})
connection.connect();
这里的host为我们在腾讯云上开通的外地址,端口号也是在外网地址里面,注意要把外网地址写分开,用户为默认的管理员用户,密码为我们在云平台上设置的密码,数据库为我们创建的nodejs数据库。
接下来我们对数据库进行增删改查操作
/**
*增加员工
*/function addEmployee(){
var employeeInsertSql='INSERT INTO employee(name,sex,age,email) VALUES(?,?,?,?)';
var employeeInsertSql_Params= ['Tim','男',22,'18818216454@163.com']
connection.query(employeeInsertSql,employeeInsertSql_Params,function(err,result){
if(err) console.log('[INSERT ERR]-',err.message);
console.log(result);
})}addEmployee()
}
/**
*更新员工
*/
function insertEmployee(){
var employeeUpdateSql="UPDATE employee SET name=? WHERE age=?";
var employeeUpdateSql_Params= ['Peter',22];
connection.query(employeeUpdateSql,employeeUpdateSql_Params,function(err,result){
if(err) console.log('[UPDATE ERR]-',err.message);
console.log(result);
})}
insertEmployee();
/**
*查询员工
*/ function getEmployee(){
var employeeGetSql="SELECT* FROM employee";
connection.query(employeeGetSql,function(err,result){
if(err) console.log('[SELECT ERR]-',err.message);
console.log(result);
})}
getEmployee();
/**
*删除员工
*/ function deleteEmployee(){
var employeeDeleteSql="DELETE employee WHERE name=?";
var employeeDeleteSql_Params='Peter';
connection.query(employeeDeleteSql,employeeDeleteSql_Params,function(err,result){
if(err) console.log('[DELETE ERR]-',err.message);
console.log(result);
})
}deleteEmployee();
这样我们就可以愉快的操作数据库了
如果大家想把项目更模块化操作,可在model下面新建一个employee_two.js,代码如下
var mysql= require('mysql');var connection= mysql.createConnection({
host:'',
user:'root',
password:'',
database:'nodejs',
port:})connection.connect();/**
*增加员工
*@param{String} employee
*@param{Function} callback
*/exports.addEmployee=function(employee,callback){
var employeeInsertSql='INSERT INTO employee(name,sex,age,email) VALUES(?,?,?,?)';
var employeeInsertSql_Params= [employee.name,employee.sex,employee.age,employee.email]
connection.query(employeeInsertSql,employeeInsertSql_Params,callback)}/**
*更新员工
*@param{String} employee
*@param{Function} callback
*/exports.updateEmployee= function(name,age){
var employeeUpdateSql="UPDATE employee SET name=? WHERE age=?";
var employeeUpdateSql_Params= ['Peter',22];
connection.query(employeeUpdateSql,employeeUpdateSql_Params,function(err,result){
if(err) console.log('[UPDATE ERR]-',err.message);
console.log(result);
})}/**
*查询员工
*
*/exports.getEmployee= function(){
var employeeGetSql="SELECT* FROM employee";
connection.query(employeeGetSql,callback)}/**
*删除员工
*@param{String} name
*/exports.deleteEmployee= function(name){
var employeeDeleteSql="DELETE employee WHERE name=?";
var employeeDeleteSql_Params='Peter';
connection.query(employeeDeleteSql,employeeDeleteSql_Params,callback)
}再在根目录下新建index.js,代码如下var db= require('./model/employee_two');//增加员工var employee={
name:'lisa',
age:22,
sex:"女",
email:'99533212@qq.com'}db.addEmployee(employee,function(err,result){
if(err) console.log("[INSERT err]-",err.message)
console.log(result);})//删除员工db.deleteEmployee('Peter',function(err,result){
if(err) console.log("[DELETE err]-",err.message)
console.log(result);})//更新员工db.updateEmployee('Tim',23,function(err,result){
if(err) console.log("[UPDATE err]-",err.message)
console.log(result);})//查询员工db.getEmployee(function(err,result){
if(err) console.log("[GET err]-",err.message)
console.log(result);})
uni-app 使用腾讯云im开发app聊天室
组件地址:
哪找教程引入就行,开发什么端看什么端文档
npm install tim-wx-sdk@2.15.0--save
npm install cos-wx-sdk-v5@0.7.11--save
----------------------------------------------------------
import TIM from'tim-wx-sdk';
import COS from"cos-wx-sdk-v5";
import logger from'./utils/logger';// app.js
import{ genTestUserSig} from'./debug/GenerateTestUserSig.js'
在app.vue文件下onLaunch周期里面:
/// userInfo为判断用户是否登录
if( userInfo!=''|| userInfo!= undefined){
if( uni.getStorageSync('zuserInfo').role== 1|| uni.getStorageSync('zuserInfo').role== 2){
//连接im
//如果您已经接入 tim,请将 uni.tim修改为 uni.$TUIKit。
uni.$TUIKit= TIM.create({
SDKAppID:' ' //填写你申请的AppID
});
uni.$TUIKit.registerPlugin({
'cos-wx-sdk': COS
});
uni.$resetLoginData= this.resetLoginData(userInfo)
uni.$TUIKitTIM= TIM;
uni.$TUIKitEvent= TIM.EVENT;
uni.$TUIKitVersion= TIM.VERSION;
uni.$TUIKitTypes= TIM.TYPES;//监听系统级事件
uni.$TUIKit.on(uni.$TUIKitEvent.SDK_NOT_READY, this.onSdkNotReady);
uni.$TUIKit.on(uni.$TUIKitEvent.KICKED_OUT, this.onKickedOut);
uni.$TUIKit.on(uni.$TUIKitEvent.ERROR, this.onTIMError);
uni.$TUIKit.on(uni.$TUIKitEvent.NET_STATE_CHANGE, this.onNetStateChange);
uni.$TUIKit.on(uni.$TUIKitEvent.SDK_RELOAD, this.onSDKReload);
uni.$TUIKit.on(uni.$TUIKitEvent.SDK_READY, this.onSDKReady);
}
}
// TODO:
resetLoginData(info){
let _this= this
this.globalData.expiresIn='';
this.globalData.sessionID='';
this.globalData.userInfoIm={
userID: info.userId,
userSig: info.txSig,
token: info.token,
phone: info.phone
};
this.globalData.userProfile= null;
uni.$TUIKit.login({userID: info.userId.toString(), userSig: info.txSig.toString()})
.then(function(imResponse){
// console.log(imResponse.data);//登录成功
// _this.getUpdateMyProfile()
if(imResponse.data.repeatLogin=== true){
//标识帐号已登录,本次登录操作为重复登录。v2.5.1起支持
// console.log(imResponse.data.errorInfo);
}
})
.catch(function(imError){
console.warn('login error:', imError);//登录失败的相关信息
});
},
onTIMError(){},
onNetStateChange(){},
onSDKReload(){},
onSDKReady(event){
let _this= this
_this.getUpdateMyProfile()
_this.getImUnread()
},
onSdkNotReady(){
this.getImLogin()
},
onKickedOut(){
uni.showToast({
title:'您被踢下线',
icon:'error'
});
let userinfo=''
uni.setStorageSync('zuserInfo', userinfo)
setTimeout(()=>{
uni.redirectTo({
url:'/pages/login/login'
});
},2000)
// uni.navigateTo({
// url:'./pages/TUI-Login/login'
//});
},
logoutTim(){
uni.$TUIKit.logout()
},
uni.navigateTo({
url:'/pages/TUI-Chat/chat?conversationID=C2C'+ this.info.user_id
});
getImUnread(){
uni.$TUIKit.getConversationList().then(res=>{
// console.log(res.data.conversationList)
for( let i of res.data.conversationList){
if( i.unreadCount!= 0){
uni.showTabBarRedDot({index:2})
return
}
}
}).catch(fail=>{
// console.log(fail)
});
},