这里是在简书仿简书的第四篇,早睡早起身体好
前后端都要开发,那就后端先行,先来实现一个简单的 HTTP 服务,并配置后端路由,要实现的目标是,前端 ajax 请求不同的地址后端返回不同的数据。
比如 ajax 请求 /user
时后端返回用户的信息,而当 ajax 请求访问 /post
时后端返回文章的信息。
这里就遇到了前端路由和后端路由的问题。前端路由针对的是用户访问的 url 返回不同的页面,而每个前端页发的 ajax 请求可能即包含发往 /user
的,同时又包含发往/post
的。
用图大概是这样的,我就是想用笔写写字。
设计目录结构
创建一个名为 jianshu_server 的文件夹,并创建一个 package.json
,填入要装的包,具体可参考01篇。使用 npm install
安装所需的包。
controllers
models
routes
index.js
config.js
前三项是文件夹,index.js
是入口文件,config.js
是配置文件。
config.js 配置信息
编写不便于公开的配置信息,jwt 和 mongodb 需要用到,该项目是一个测试项目,其实这一步可以略过,但注意一下安全总没错。
你如果只是在本地开发,那你随便搞,但如果你要将项目部署到服务器上,一定要注意安全问题,因为你不知道有哪些人在用端口扫描你的服务器。
// config.js
module.exports = {
connectionStr: 'mongodb://localhost:27017/api',
secret: 'jwt_secret',
}
koa 启动一个 http 服务
参考 [借用node来走一下简单的后端流程] 。(https://www.jianshu.com/p/de49ed4be240)
启动服务并挂载路由文件,路由文件会在下文指出。
// index.js
const Koa = require('koa');
const app = new Koa();
// 挂载路由
const routing = require('./routes')
routing(app)
app.listen(3000, () => {
console.log("Server is running on http://localhost:3000")
});
将 route 文件夹中的文件输出到 index 中
一个一个导入路由文件过于麻烦,让 index.js 处理。
// ./routes/index.js
const fs = require('fs')
module.exports = (app) => {
fs.readdirSync(__dirname).forEach(file => {
if(file === 'index.js') {
return
}
const route = require(`./${file}`)
app.use(route.routes()).use(route.allowedMethods())
})
}
这段代码的意思是读取当前文件夹非index.js文件路由文件并自动挂载到路由。
连接数据库
// index.js
const mongoose = require('mongoose')
const { connectionStr } = require('./config')
mongoose.connect(connectionStr,
{
useUnifiedTopology: true,
useNewUrlParser: true,
},
() => {
console.log('MongoDB 连接成功')
})
mongoose.connection.on('error', console.error)
数据库连接使用 mongoose
,具体配置可参考官方文档,这里就用到了 config.js
文件中的配置信息。
routes文件结构
// ./routes/users.js
const Router = require('koa-router')
const router = new Router()
module.exports = router
网友评论