上篇说到swift serve-side 这篇讲讲node.js 的相关知识 ,这是个完全可以部署的服务器 ,swift 暂时只能自己的mac上玩玩...(国内服务器部署swift不知道会有啥坑).
简单介绍下node。
node是基于谷歌爹的v8引擎 node跟golang 差不多时候发布,node处理高并发高吞吐很6,但是cpu密集型的计算会阻塞执行,并且影响其他请求,(这里就要说node的单线程这个概念了 但是我不说 说多了就暴露智商了)。所以cpu密集型的任务可以交给其他服务器去处理 golang就不错。
- 环境安装 (有问题 找谷哥爹)
- mac os 安装 node
brew install node
- 自带npm 创建项目
npm init
- 一溜创建完毕之后 就可以跑起来了 (我是用idea 直接创建的node服务器 。express bodypaser 都是idea帮你安装好的)
npm install express body-parser cookie-parser superagent mongoose jade --save
express: node.js 下的web应用程序框架 ,封装了很多方法 帮助开发。 现在koa2是express的替代品 可以尝试
body-parser ,cookie-parser : 本是express自带的 后来拆分下来了。 做解析用
superagent : js 下的http请求工具
mongoose: 操作mongodb的工具
jade : 模版 。现在也改名了 有ejs .
- 在app.js 中创建一个实例
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');var bodyParser = require('body-parser');
var app = express();
#var routes = require('./routes/index');
#var users = require('./routes/users');
// view engine setup 中间件
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');
// uncomment after placing your favicon in /public//
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users);
// catch 404 and forward to error handler
app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err);});
app.get('/hi',(req,res,next)=>{
#req:请求对象 req.query能取get请求 req.body能取post请求的参数
#res:返回操作的对像
res.send('fuck')
})
app.post('/helli',function(req,res,next){
res.send({'code':200})
})
//在 3000端口监听
app.listen(3000)
- 有服务器必须要有数据库 这里教大家创建简单的mongodb数据库
#这是我们的电影信息的数据库 (爬电影用的😄)应该创建个文件叫movie.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//这里给promise确定一个使用的对象 。bluebird 是比较好的promise库 ,不赋值会有错 具体看官网说明
mongoose.Promise = require('bluebird');
var movieSchema = new Schema({
title:{type:String},
rating:String,
releaseYear:Number,
hasCreditCookie:Boolean
});
// 该语句可以使外界调用这个对像。创建movies的collection..mongodb 的相关知识应该学下。创建的是movie但是实际上mongodb会去做检测,改为复数
exports.movieSchema = mongoose.model('movie',movieSchema);
如何使用呢
#在 app.js
var movieSchema = require('../DB/MovieDB').movieSchema;
var mongoose = require('mongoose');
mongoose.promise = require('bluebird');
mongoose.connect('mongodb://127.0.0.1:27017/movies');
/* 存数据 */
app.get('/userinfo',function (req,res,next) {
var title = req.query.title;
var rating = req.query.rating;
var releaseYear = req.query.releaseYear;
var has = req.query.hasCreditCookie;
var thor = new movieSchema({
title:title, rating:rating,
releaseYear:releaseYear,
hasCreditCookie:has }); thor.save(function (err,thor) {
if (err) {
console.log(err)
res.send(err)
} res.send(thor) })
});
/* 查询数据*/
app.get('/find',function(req,res,next){ movieSchema.findOne({"title":req.query.title},function (err,doc) { res.send(doc) })
});
/* 修改数据*/
app.get('/update',function(req,res,next){ movieSchema.update({"title":req.query.title},{
$set:{"releaseYear":req.query.releaseYear} },function(err){ if (err) { return }
res.send("更新成功"); })
});
如果你完全按照我的代码去运行 八成是错的 。是从项目上扣下的代码 没有验证 见谅~~~ node.js 对于新手来说还是比较简单的 上手容易,快速部署
当然 还有 redis 这个没说 这个主要用ioredis,还是国人写的
一个简单的与数据库 带有redis 的服务器很快就能写出来 是不是有点小满足呢?