04 | 后端初始化

2020-10-09  本文已影响0人  cemcoe

这里是在简书仿简书的第四篇,早睡早起身体好

前后端都要开发,那就后端先行,先来实现一个简单的 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
上一篇 下一篇

猜你喜欢

热点阅读