【7.25】nodejs udemy tutorial 20-29

244 阅读1分钟

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}`);
});

www.udemy.com/course/node…