这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战
使用Node + Express + mongodb 搭建API服务端
创建项目
mkdir <project-name>
初始化项目
npm init -y # npm package.json 初始化
yarn add express # 安装 express
创建入口文件及初始化配置
mkdir server.js
引入express及express初始化配置
// server.js
const express = require("express"); // 引入express
const app = express(); // express初始化
app.get("/",(req, res)=>{ // 创建路由接口
res.send("Hello Express")
})
const port = process.env.PORT || 5000; // 设置端口号
app.listen(port, ()=>{ //启动服务,监听端口
console.log("Server is Running on http://localhost:${port}")
})
配置package.json 启动脚本命令
// package.json
"scripts": { "start": "node server.js"},
"server": "nodemon server.js" // 安装 nodemon 启动热部署
使用 Mongoose 连接 Mongodb
yarn add mongoose
//@Server.js
const express = require("express");
const mongoose = require("mongoose");
mongoose.set('useFindAndModify', false);
const app = express();
// DB Config 连接数据库
const db = require("./config/keys").mongoURI;// 创建配置项目录config, 存放静态常量
mongoose.connect(db, {
user: <usernmae>,
pass: <password>,
useNewUrlParser: true,
useUnifiedTopology: true
}).then(res=>{
console.log(`MongoDB connected!`)
}).catch(err=>{
console.log(`MongoDB connected Failed: \n ${err}`)
})
创建 配置文件
touch config/keys.js
// @config/keys.js
module.exports = {
mongoURI: "mongodb://127.0.0.1:27017/<dbname>",
};
创建模型 Schema
创建目录 models 存放模型
新建用户模型 User.js文件
// User.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const UserSchema = new Schema({
username:{
type: String,
require: true
},
password: {
type: String,
require: true
},
data: {
type: Date,
default: Date.now()
}
});
module.exports = User = mongoose.model('user', UserSchema);
创建Route Api
创建目录 routes/api
创建用户路由文件 user.js
// @routes/api/users.js
const express = require('express'); //引入express
const router = express.Router();// 使用express Router
const User = require("../../models/User"); // 引入User模型
// 新增用户
router.get("/add", (req, res) => {
const newUser = new User({
username: "test",
password: "test"
})
newUser.save().then(user => {
res.json({
msg: "用户新新成功",
data: user
})
}).catch(err=>{
console.log(err);
})
});
module.exports = router; // 导出路由模块
在 server.js 中引入
//@server.js
const users = require('./routes/api/users'); // 导入users路由
// ....
app.use('/api/users', users); // 配置users路由并使用
express访问静态资源
创建可范文的静态资源目录
// @server.js
const path = require('path'); // 导入path
app.use(express.static(path.join(__dirname, 'public'))); // 指定静态资源目录
// localhost:端口号/文件名称 直接访问
route api 返回静态页面
const fs = require("fs");
app.get("/", (req,res)=>{
res.writeHead(200,{'Content-Type':'text/html'});
fs.readFile('./public/index.html','utf-8',function(err,data){
if(err){
throw err ;
}
res.end(data);
});
});