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中进行正常获取。这个小坑玩了我半天。