Build an Instagram clone with AngularJS, Satellizer, Node.js and MongoDB
instagram 目录下新建一个 server 文件夹,和 client 并排放在一起。
在 server 目录下新建两个文件: package.json 和 server.js。打开 package.json 把下面的代码复制进去,这是我们整个应用所要用到的依赖:
<!-- lang: js -->
{
"name": "instagram-server",
"version": "0.0.0",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"bcryptjs": "^2.0.2",
"body-parser": "^1.8.1",
"cors": "^2.4.2",
"express": "^4.9.0",
"jwt-simple": "^0.2.0",
"moment": "^2.8.3",
"mongoose": "^3.8.17",
"request": "^2.44.0"
}
}
然后把下面代码复制到 server.js:
<!-- lang: js -->
var bcrypt = require('bcryptjs');
var bodyParser = require('body-parser');
var cors = require('cors');
var express = require('express');
var jwt = require('jwt-simple');
var moment = require('moment');
var mongoose = require('mongoose');
var path = require('path');
var request = require('request');
var app = express();
app.set('port', process.env.PORT || 3000);
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));
app.listen(app.get('port'), function() {
console.log('Express server listening on port ' + app.get('port'));
});
注意: 所有的后台代码都在这里,除非另有说明。也就是说,我不打算把我们的 Express 应用分成多个 models, controllers, routes, 之类的。这样做没别的理由,只为了简单起见。
让我们安装包依赖,看看我们的服务器有没有问题。打开终端,进入 instagram/server 目录,然后输入 npm install:
插播个广告,我用的是 fish shell ,来自 oh-my-fish 工程。我超级爱它的自动补全功能。还有些超赞的功能比如说它能记住你最后一条命令。如果比如我输入 py 它会提示 python -m SimpleHTTPServer 这正是我所需要的。
安装完所有的应用依赖之后,我们现在可以启动服务器了。
你可以执行 npm start
或者 node server.js
来启动 Express 应用。如果所有的设置都正确的话,你会看到下面的这句:
Express server listening on port 3000
如果你以前有做过 Express 应用这段代码你应该很熟悉。有一点应该值得注意的是 cors() 中间件。由于我们的 AngularJS 应用是运行在另一个独立端口的,我们需要做跨域请求支持(cross-origin requests support
),正如我第一部分提到的那样,这个 web 服务最厉害的地方在于独立。你可以找一些屌丝去开发前端,有它自己独立的 Git 仓库来维护,以及像例子里面的运行在 Heroku,另外一波屌丝来开发后台,把它发布到 Azure 或者 OpenShift 上。这样最大的优势就是你可以让一堆屌丝独立并行的进行开发,而他们没有借口说别的小组拖进度。
注意: 关于如何微调 CORS, 参考 https://github.com/troygoode/node-cors#configuring-cors.