这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战」
新建一个文件夹
npm init
生成package.json现在就可以使用npm了。
生成 server.js入口文件
touvh server.js
我们想要实现http通信 就要使用 express
安装express
npm i express
此时可以发现node_modules文件出现了。因为有了依赖
我们如果不使用它每次修改都要重启,才能看到改动
npm install nodemon -g
npm run start
用于线上调试当然本地也可以使用npm run server
用于我们本地调试,其启动的是 nodemon"scripts": {
"start": "node server.js",
"server": "nodemon server.js"
},
const express = require('express')
const app = express()
app.get("/",(req,res)=>{
res.send("Hello world")
})
const port = process.env.PORT || 5000
app.listen(port,()=>{
console.log(`server running on ${port}`)
})
如果在控制台成功打印就说明连接上了
mongodb安装如果是Mac的请看 这篇文章 操作mongodb的插件有很多,这里我们使用mongoose 安装插件
npm install mongoose
新建一个config文件夹 📂 ,然后建一个 keys.js文件
module.exports = {
// 没有数据库和密码的本地服务 mine
mongoURI : "mongodb://localhost/mine
}
// 引入mongoose
const mongoose = require('mongoose')
// 我们把数据的驱动连接URL 写到了另一个文件config文件架下的keys.js中
const db = require("./config/keys").mongoURI
// 连接 成功会打印
mongoose.connect(db).then(()=>{
console.log("connected")
}).catch(err=> console.log(err))
新建个文件夹 routes 其下面再建一个api。然后新建一个user.js文件
// 引入express
const express = require('express');
// 引入Router
const router = express.Router();
// 写个接口 返回json {'msg':'you are success'}
router.get("/test",(req,res)=>{
res.json({'msg':'you are success'})
})
// 导出 router
module.exports = router;
在 server.js中引用 users.js
// 引入 users.js
const users = require('./routes/api/users')
// 使用router
app.use('/api/users',users);
在浏览器中输入路由 /api/users/test 端口是5000
新建个文件夹models 在其下面新建个userModel.js
const mongoose = require('mongoose')
const Schema = mongoose.Schema;
// Create Schema
const UserSchema = new Schema({
// 字段
name:{
// 类型
type:String,
// 是否必须
required:true
},
email:{
type:String,
required:true
},
password:{
type:String,
required:true
},
// 头像我们这次先不用
avatar:{
type:String
},
date:{
type:Date,
default:Date.now
}
})
module.exports = User = mongoose.model("users",UserSchema)
然后在 users.js中引入
const User = require('../../models/userModel')
之前我们想要使用post请求,都需要安装body-parser。
npm install body-parser
但是现在express已经废弃了body-parser
然后我们这么写 注意app.use也是有顺序的,我们最好把它加载前面。 server.js
app.use(express.urlencoded({extended:false}))
app.use(express.json())
在 users.js 新建一个请求,我们测试一下,打印请求的body
router.post('/register',(req,res)=>{
console.log(req.body)
})
然后用postman 发起一个请求
可以在我们的控制台中看到输出就是测试成功了。
User是引入的我们刚才创建好的数据modal
密码加密
使用bcrypt
npm install bcrypt
router.post('/register',(req,res)=>{
// console.log(req.body)
// 查询数据库中是否有邮箱
User.findOne({email:req.body.email})
.then((user)=>{
if(user){
return res.status(400).json({email:"邮箱已被注册"})
}else{
const newUser = new User({
name : req.body.name,
email : req.body.password,
password : req.body.password
})
// 参数加密方式 10
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(newUser.password, salt, (err, hash)=>{
// err是异常 hash是加密后的
if(err) throw err;
newUser.password = hash;
newUser.save()
.then(user => res.json(user)) // 成功会返回一个user,然后我们response返回去就行了
.catch(err=> console.log(err)) // 如果失败得到一个catch
});
});
}
})
})
然后在postman试一试
再去MongoDB中查询一下
config/keys.js
module.exports = {
// 没有数据库和密码的本地服务
mongoURI : "mongodb://localhost/mine"
}
routes/api/users.js
const express = require('express');
const router = express.Router();
const User = require('../../models/userModel')
const bcrypt = require('bcrypt')
/**
* $route GET /api/users/test
* @desc 返回的请求的json数据
* @access public
*/
router.get("/test", (req, res) => {
res.json({ 'msg': 'you are success' })
})
/**
*
*
*/
router.post('/register',(req,res)=>{
// console.log(req.body)
// 查询数据库中是否有邮箱
User.findOne({email:req.body.email})
.then((user)=>{
if(user){
return res.status(400).json({email:"邮箱已被注册"})
}else{
const newUser = new User({
name : req.body.name,
email : req.body.password,
password : req.body.password
})
// 参数加密方式 10
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(newUser.password, salt, (err, hash)=>{
// err是异常 hash是加密后的
if(err) throw err;
newUser.password = hash;
newUser.save()
.then(user => res.json(user)) // 成功会返回一个user,然后我们response返回去就行了
.catch(err=> console.log(err)) // 如果失败得到一个catch
});
});
}
})
})
module.exports = router;
server.js
const express = require('express')
const mongoose = require('mongoose')
// 引入 users.js
const users = require('./routes/api/users')
const app = express()
// DB config
const db = require("./config/keys").mongoURI
mongoose.connect(db).then(()=>{
console.log("connected")
}).catch(err=> console.log(err))
app.get("/",(req,res)=>{
res.send("Hello world")
})
//
app.use(express.urlencoded({extended:false}))
app.use(express.json())
// 使用router
app.use('/api/users',users);
const port = process.env.PORT || 5001
app.listen(port,()=>{
console.log(`server running on ${port}`)
})