middleware explained
以 express 框架为例,中间件是一个很有用的部分,可以使用已有的中间件,比如 morgan 可以打印请求的信息
或者自定义一个中间件,做权限判断等操作,如果没有权限,跳转到登录页面
const express = require('express');
const morgan = require('morgan');
const app = express();
const myOwnMiddleware = (req, res, next) => {
// 只这样写不行,因为让 js 线程阻塞了,不知道什么时候继续进行
console.log('middleware applied!!!');
// 需要调用 next 继续执行
next();
}
// middleware
app.use(morgan('dev'));
app.use(myOwnMiddleware);
// bring in routes
const postRoutes = require('./routes/post');
app.get('/', postRoutes.getPosts)
const port = 8080;
app.listen(port, () => {
console.log(`a nodejs api is listening on port ${port}`);
});
using controllers
随着路由的增多,我们处理数据返回的代码不能都耦合在 routes 里面,routes 做一个路由转发,controllers 处理具体的数据返回逻辑
// app.js
const postRoutes = require('./routes/post');
app.use('/', postRoutes);
// routes/post
const postController = require('../controllers/post');
const express = require('express');
const router = express.Router();
router.get('/', postController.getPosts)
module.exports = router;
// controllers/post
exports.getPosts = (req, res) => {
res.send('hello world with nodejs');
}
connecting to database with mongoDB
连接数据库,这里以 mongoDB 为例,首先要在 mongoDB 官网上注册,新建集群,获取数据库连接方式,这里参考 www.udemy.com/course/node…
在代码里使用 mongoose 连接数据库
我们将数据库的连接方式,放到了根目录的 .env 文件中,使用 dotenv 包,可以用 process.env 的方式,访问到 .env 的环境变量,将环境变量独立于程序配置
// .env
MONGO_URI=mongodb+srv://username:password@nodeapi.wws5z.mongodb.net/myFirstDatabase?retryWrites=true&w=majority
PORT=8080
// app.js
const express = require('express');
const morgan = require('morgan');
const mongoose = require('mongoose');
const app = express();
const dotenv = require('dotenv');
dotenv.config()
// db connection
mongoose.connect(
process.env.MONGO_URI,
{useNewUrlParser: true, useUnifiedTopology: true}
)
.then(() => console.log('DB Connected'))
mongoose.connection.on('error', err => {
console.log(`DB connection error: ${err.message}`)
});
// middleware
app.use(morgan('dev'));
// bring in routes
const postRoutes = require('./routes/post');
app.use('/', postRoutes);
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log(`a nodejs api is listening on port ${port}`);
});