一、NodeApi 环境搭建 创建文件夹
新建一个文件夹 nodeApi
在本地终端运行
npm init创建一个package.json 文件
修改 package.json
"scripts": { "start": "node server" },将原来的test启动命令修改为现在的dev,node server的意思是用node启动本地文件server.js,所以我们要在当前文件夹下在创建一个server.js
安装依赖在本地终端运行
cnpm install express dotenv --save //如果你没有全局安装过nodemon,需要先全局安装一次 cnpm install -g nodemon //然后在开发环境安装 cnpm install -D nodemon修改package.json,添加一个用nodemon启动项目的新命令
"dev":"nodemon server"npm安装比较慢,这里我是用淘宝源来安装我们搭建本次项目所需要的环境依赖。
其中express是node的一个框架,每次修改文件都需要重启服务器,所以我们需要nodemon来帮助我们重启。
而dotenv呢?由于项目不同需求,需要配置不同环境变量,按需加载不同的环境变量文件,使用dotenv,可以完美解决这一问题。
创建环境变量在当前目录下新建文件夹config,在config文件夹下新建文件config.env
NODE_ENV=development PORT=5000复制上述代码到新创建的文件下
修改package.json文件
"start": "NODE_ENV=production node server",当等于生产环境的时候,让我们运行 node server来启动项目
引入依赖和环境变量并使用
const express = require("express") const dotenv = require("dotenv") dotenv.config({ path:\'./config/config.env\', }); const app = express(); const PORT = process.env.PORT || 3000; app.listen(PORT,console.log(`Server rnning in ${process.env.NODE_ENV} mode on port ${PORT}`))运行 npm run dev 会发现我们运行成功,监听到的是5000端口,这说明环境变量的和依赖的引入没有问题
创建路由下面是Node接收get请求返回数据的几种方式
// :5000/ app.get("http://www.likecs.com/",(req,res)=>{ // res.send("<h1>Hello World</h1>") 发送HTML // res.send({mag:"Hello World"}) 发送json格式数据 // res.json({success:true}) 发送json格式数据 // res.sendStatus(400) 发送状态码 res.status(200).json({success:true,msg:"Hello World"}) //发送状态码和json数据 })上面我们访问的都是根路径,现在我们尝试给他新的路由地址及尝试新的请求方法
// :5000/api:id app.get("/api/:id",(req,res)=>{ res.status(200).json({success:true,msg:`根据${req.params.id}获取单个数据`}) }) // :5000/api app.post("/api",(req,res)=>{ res.status(200).json({success:true,msg:`创建新的数据`}) }) // :5000/api:id app.put("/api/:id",(req,res)=>{ res.status(200).json({success:true,msg:`根据${req.params.id}更新数据`}) }) // :5000/api:id app.delete("/api/:id",(req,res)=>{ res.status(200).json({success:true,msg:`根据${req.params.id}删除数据`}) }) 路由文件分离前面我们做到了创建各种接口,可以想象一下,如果项目足够大的话,把接口放在一起,是不是很不利于维护,接下来我们要做的就是把路由文件分离,拆分成一小块一小块。
在当前目录下新建routes文件夹,在routes文件夹下新建api.js,其中routes用来存放我们所有的接口,api文件存放访问/api这个路径下的接口
完整代码如下:
/routes/api.js
const express = require("express") const router = express() router.get("http://www.likecs.com/",(req,res)=>{ res.status(200).json({success:true,msg:"获取所有数据"}) }) router.get("/:id",(req,res)=>{ res.status(200).json({success:true,msg:`根据${req.params.id}获取单个数据`}) }) router.post("http://www.likecs.com/",(req,res)=>{ res.status(200).json({success:true,msg:`创建新的数据`}) }) router.put("/:id",(req,res)=>{ res.status(200).json({success:true,msg:`根据${req.params.id}更新数据`}) }) router.delete("/:id",(req,res)=>{ res.status(200).json({success:true,msg:`根据${req.params.id}删除数据`}) }) module.exports = routerserver.js
const express = require("express") const dotenv = require("dotenv") const app = express() dotenv.config({ path:\'./config/config.env\', }); const api = require("./routes/api") app.use(\'/api\',api) const PORT = process.env.PORT || 3000; app.listen(PORT,console.log(`Server rnning in ${process.env.NODE_ENV} mode on port ${PORT}`))上述代码中,我们通过require将api引入到了server.js中,并通过app.use()这个方法挂载到当访问/api路径时,将通过api这个文件来处理请求。
优化路由在api.js中,我们可以看到尽管请求方法不一样,但请求的路径大多相同,现在让我们来优化一下吧
在当前目录下新建文件夹controllers,在controllers文件夹下新建api.js,代码如下:
/controllers/api.js