一、Express
1、全局安装Express脚手架
npm install express-generator -g
2、用模板生成工程文件
express --view=pug myapp
cd myapp
npm install
DEBUG=myapp:* npm start #linux,mac
set DEBUG=myapp:* & npm start # windows
3、添加nodemon
在开发时使用nodemon,修改文件后可以自动重启 express 服务,将nodemon模块依赖写入devDependencies 节点。
npm install --save-dev nodemon
修改 package.json 的 scripts 内容:
"scripts": {
"start": "node ./bin/www",
"devstart": "nodemon ./bin/www"
}
之后,使用
SET DEBUG=./bin/myapp:* & npm run devstart
启动 express 服务。这样在开发过程中修改文件的时候,express服务就会自动重启。
4、生成的文档目录结构
/myapp
app.js
/bin
www
package.json
/node_modules
/public
/images
/javascripts
/stylesheets
style.css
/routes
index.js
users.js
/views
error.pug
index.pug
layout.pug
www文件
/bin/www 是应用的主入口。应用的真正入口是app.js文件,所以www文件先把app.js文件引进来,其余的内容主要就是创建了一个node HTTP server。
//依赖
var app = require('../app');
var debug = require('debug')('album:server');
var http = require('http');
//设置端口
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
//创建 HTTP server.
var server = http.createServer(app);
//监听端口
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
app.js(重要文件)
(1)引入npm install下载的包,并创建express对象:
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var app = express();
(2)使用上面引入的包
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
(3)引入routes文件夹里面的文件,这些文件主要处理URL路由。
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
app.use('/', indexRouter);
app.use('/users', usersRouter);
(4)设置模板,views 设置了模板的位置;view engine设置了要使用的模板引擎。
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
(5)处理错误的http请求
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
routes文件夹
以users.js为例,首先加载express,通过express获取到router对象。使用router对象指定路由的方法和路径。由于app.js已经指定 /users 到./routers/users.js,因此当浏览器请求/user时,会执行下面的回调函数。
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
module.exports = router;
视图模板
Express 应用默认使用的是 pug模板,views文件里面是所有的视图模板。在router文件里, 使用Response.render()
指定要加载的模板和传递给模板的一些参数。下面的/routes/index.js文件里的示例:
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
下面是index.pug文件,传进来的title的值将替换它:
extends layout
block content
h1= title
p Welcome to #{title}
二、mongoose
mongoose负责mongodb连接的建立,维持,数据结构的建立,模型管理等工作。
1、安装mongoose
npm install mongoose
2、连接管理
//连接mongodb
mongoose.connect(mongodb://127.0.0.1:27017/example, function (err) {
if (err)
console.log("mongodb连接失败!");
else {
console.log("mongodb连接成功!");
server.listen(3000);
}
})
//http连接关闭时,关闭mongodb连接
server.on('close', function () {
mongoose.disconnect();
console.log("mongodb释放连接!");
})