express探坑之旅

express探坑之旅

  • 如同往常一样,安装mongoose。

cnpm i mongoose -S

  • 将数据库连接的db.js

// 引入mongoose
const mongoose = require('mongoose')
// 定义连接地址
const DB_URL = "mongodb://localhost:27017/Lynn"
//连接数据库
mongoose.connect(DB_URL)//连接成功
mongoose.connection.on('connected',()=>{
    console.log('connection is success')
})
//连接断开
mongoose.connection.on('disconnected',()=>{
    console.log('connection is disconnected')
})
//连接出错
mongoose.connection.on('error',(e)=>{
    console.log('connection is error' + e)
})
// 导出
module.exports = mongoose

  • 定义一个集合

const mongoose = require('../db')//连接数据库
const Schema = mongoose.Schema

//定义数据的类型
const schema = new Schema({
    userid: { type: String },
    nickname: { type: String },
    tel: { type: String },
    password: { type: String }
})
//生成一个集合名称为pro的
module.exports = mongoose.model('User',schema)
  • 定义一个数据库的操作方法:

const sql = {
    insert(ColName, insertData) {
        return new Promise((resolve, reject) => {
            ColName.insertMany(insertData, err => {
                err ? reject(err) : resolve();
            });
        });
    }
}
  • 撰写一个接口

var express = require("express"); // 引入express
var router = express.Router(); // 使用路由
var sql = require("./../sql"); // 引入数据库操作的方法
var User = require("./../sql/col/users"); // 引入数据库集合
router.get("/", function(req, res, next) {
  res.send("用户相关接口");
});
// 注册的接口
router.post("/register", (req, res, next) => {
    // 1.获取用户提交的数据
    let { tel, password } = req.body;
    // 等待的操作逻辑
})

注册路由

// 引入api
const userApi = require('./api/user')
// 下面的需要在实例的var app = express()之后

// 注册Api
app.use('/api/users', userApi);





OK,一切正常,但马上问题来了。发现怎么都获取不到tel,说属性值不能为undefined或null,但是发送请求的时候是添加了的。各种尝试,将请求数据转化为json,转化为字符串去返回观察,都不太方便,会显示[Object Object],然后我直接将请求的req.body变成字符串进行返回,发现是undefined。问题来了,这是什么原因导致的,各种查询后发现是express并没有body-parser模块,那就安装

cnpm i body-parser -S// 安装

var bodyParser = require('body-parser') // 引入

app.use(bodyParser.json()); // 使用

再次尝试,发现还是无法获取,原因是少了一步app.use(bodyParser.urlencoded({ extended: true}))确保能够让post请求中的数据在req.body中进行正常获取。这个小坑玩了我半天。

暂无评论