上篇說到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 的服務器很快就能寫出來 是不是有點小滿足呢?