标签:
上一篇我们讲了如何使用angular搭建起项目的前端框架,前端抽象出一个service层来向后端发送请求,后端则返回相应的json数据。本篇我们来介绍一下,如何在nodejs环境下利用express来搭建起服务端,使之正确的响应前端的请求。本文所讲的示例还是基于我们的学习项目QuestionMaker(https://github.com/Double-Lv/QuestionMaker)
var express = require(‘express‘); var app = express(); app.listen(3000); var _rootDir = __dirname; var protectDir = _rootDir + ‘/protect/‘; app.use(express.static(_rootDir)); //注册路由 app.get(‘/‘, function(req, res){ res.sendFile(_rootDir+‘/src/index.html‘); }); app.use(function(req, res, next) { res.status(404).sendFile(_rootDir+‘/src/404.html‘); }); app.use(function(err, req, res, next) { console.error(err.stack); res.status(500).send(‘500 Error‘); });
app.use(function(req, res, next){ console.log(‘中间件1‘); next(); }); app.use(function(req, res, next){ console.log(‘中间件2‘); });
我们添加了两个中间件,请求过来之后会先被第一个捕获,然后进行处理,输出“中间件1”。后面接着执行了next()方法,就会进入下一个中间件。一个中间件执行后只有两种选择,要么用next指向下一个中间件,要么将请求返回。如果什么都不做,请求将会被挂起,也就是说浏览器端将得不到返回,一直处于pendding状态。例如上面的中间件2,将会造成请求挂起,这是应该杜绝的。
app.use(‘/api/submitQuestion‘, function(){})
var apiRouter = express.Router(); apiRouter.post(‘/submitQuestion‘, questionController.save); app.use(‘/api‘, apiRouter);
//注册路由 app.get(‘/‘, function(req, res){ res.sendFile(_rootDir+‘/src/index.html‘); }); var apiRouter = express.Router(); apiRouter.post(‘/getQuestion‘, questionController.getQuestion); apiRouter.post(‘/getQuestions‘, questionController.getQuestions); apiRouter.post(‘/submitQuestion‘, questionController.save); apiRouter.post(‘/updateQuestion‘, questionController.update); apiRouter.post(‘/removeQuestion‘, questionController.remove); apiRouter.post(‘/getPapers‘, paperController.getPapers); apiRouter.post(‘/getPaper‘, paperController.getPaper); apiRouter.post(‘/getPaperQuestions‘, paperController.getPaperQuestions); apiRouter.post(‘/submitPaper‘, paperController.save); apiRouter.post(‘/updatePaper‘, paperController.update); apiRouter.post(‘/removePaper‘, paperController.remove); app.use(‘/api‘, apiRouter);
在router的第二个参数中,我们传入了questionController.save这样的方法,这是什么东西呢?怎么有点MVC的味道呢?没错,我们已经能够匹配到路由了,那服务端的业务逻辑以及数据库访问等该如何组织代码呢?
var Question = require(‘../models/question‘); module.exports = { //添加试题 save: function(req, res){ var data = req.body.question; Question.save(data, function(err, data){ if(err){ res.send({success: false, error: err}); } else{ res.send({success: true, data: data}); } }); } }
apiRouter.post(‘/submitQuestion‘, questionController.save);
标签:
原文地址:http://www.cnblogs.com/Leo_wl/p/4963568.html