nodejs使用eggjs创建项目,接入influxdb完成单表增删改查

简介: nodejs使用eggjs创建项目,接入influxdb完成单表增删改查

转载请注明出处:

1.Eggjs 特性:

  Eggjs 是 Node.js 服务端应用开发框架,它提供了一套约定,使开发者能够快速搭建、开发和部署应用。以下是 Egg.js 的一些特性和作用:

  1. 框架内置了基于约定的目录结构、约定的扩展机制和一些常用的插件,可以帮助开发者快速搭建应用。
  2. Egg.js 遵循 MVC 的分层架构,使代码更加清晰易于维护。
  3. Egg.js 通过插件机制提供了丰富的功能扩展,例如:数据库访问、模板引擎、Session、身份验证、安全等。
  4. Egg.js 提供了一套完善的开发调试工具,例如:自动重启、自动刷新、自动测试等。
  5. Egg.js 提供了一套完整的部署方案,例如:多进程部署、负载均衡等。

2..使用egg初始化项目

  首先需要保证本地具有nodej的环境,使用egg初始化项目

npm init egg --type=simple

  在执行该命令的中间过程,需要输入 项目名称、项目描述、项目作者以及安全的配置key

  创建之后的项目导入vscode之后如下图所示:

                                                         

3.约定规则  

  1 app/router.js:用于配置URL路由规则;

  2 app/controller/** :用于解析用户的输入,处理后返回相应的结果;

  3 app/service/: 用于编写业务逻辑层;

  4 app/public/: 用于放置静态资源;

  5 config/config.{env}.js: 用于编写配置文件;

  6 config/plugin.js 用于配置需要加载的插件;

4.接入InfluxDB配置

  egg提供5种配置文件:

    config.default.js:默认配置文件;

    config.local.js:开发环境下的配置,与默认配置合并,同名则覆盖默认配置;

    config.prod.js:生产环境下的配置,与默认配置合并,同名则覆盖默认配置;

    config.test.js:测试环境下的配置,与默认配置合并,同名则覆盖默认配置;

    config.unittest.js:单元测试环境下的配置,与默认配置合并,同名则覆盖默认配置;

  在 config.default.js 中添加influxdb相关的配置文件,并设置日志级别

config.influxdb = {
    host: 'influx_db_host',
    port: 8086,
    database: 'influx_db',
    username: 'influx_user',
    password: 'influx_pwd'
  }
  config.log = {
    level: 'DEBUG',
    consoleLevel: 'DEBUG',
  }

5. 创建user表

  在app/model/user.js中创建user表:

module.exports = app => {
  const { InfluxDB } = require('influx');
  const { host, port, database, username, password } = app.config.influxdb;
  const influx = new InfluxDB({
    host,
    port,
    database,
    username,
    password,
    schema: [
      {
        measurement: 'user',
        fields: {
          name: InfluxDB.FieldType.STRING,
          age: InfluxDB.FieldType.INTEGER,
        },
        tags: [
          'id'
        ]
      }
    ]
  });
  class User extends app.Service {
    async create(user) {
      return influx.writePoints([
        {
          measurement: 'user',
          tags: { id: user.id },
          fields: {
            name: user.name,
            age: user.age
          }
        }
      ]);
    }
    async find(id) {
      return influx.query(`select * from user where id='${id}'`);
    }
    async update(id, user) {
      return influx.writePoints([
        {
          measurement: 'user',
          tags: { id },
          fields: {
            name: user.name,
            age: user.age
          }
        }
      ]);
    }
    async delete(id) {
      return influx.query(`delete from user where id='${id}'`);
    }
  }
  return User;
};

6. user表的增删改查

  在app/controller/home.js中编写增删改查的接口:

const Controller = require('egg').Controller;
class HomeController extends Controller {
  async create() {
    const { ctx } = this;
    const { id, name, age } = ctx.request.body;
    await ctx.service.user.create({ id, name, age });
    ctx.body = { success: true };
  }
  async find() {
    const { ctx } = this;
    const { id } = ctx.query;
    const result = await ctx.service.user.find(id);
    ctx.body = result;
  }
  async update() {
    const { ctx } = this;
    const { id } = ctx.params;
    const { name, age } = ctx.request.body;
    await ctx.service.user.update(id, { name, age });
    ctx.body = { success: true };
  }
  async delete() {
    const { ctx } = this;
    const { id } = ctx.params;
    await ctx.service.user.delete(id);
    ctx.body = { success: true };
  }
}
module.exports = HomeController;

7.在app/router.js中配置路由

module.exports = app => {
  const { router, controller } = app;
  router.post('/user', controller.home.create);
  router.get('/user', controller.home.find);
  router.put('/user/:id', controller.home.update);
  router.delete('/user/:id', controller.home.delete);
};

8.启动并测试

  启动

  • 开发环境:npm run dev
  • 生产环境:npm start

  停止

npm run stop

  使用curl命令测试接口:

# 创建user
$ curl -X POST -H "Content-type: application/json" -d '{"id": "1", "name": "Alice", "age": 20}' http://localhost:7001/user
# 查找user
$ curl http://localhost:7001/user?id=1
# 更新user
$ curl -X PUT -H "Content-type: application/json" -d '{"name": "Bob", "age": 30}' http://localhost:7001/user/1
# 删除user
$ curl -X DELETE http://localhost:7001/user/1

9.目录结构及所有文件

egg-influxdb-demo
├── app
│   ├── controller
│   │   └── home.js
│   ├── model
│   │   └── user.js
│   ├── router.js
│   ├── service
│   │   └── user.js
│   └── view
│       └── home.tpl
├── config
│   ├── config.default.js
│   └── plugin.js
├── package.json
└── README.md

标签: influxdb , nodejs

目录
相关文章
|
3月前
|
数据采集 资源调度 JavaScript
Node.js 适合做什么项目?
【8月更文挑战第4天】Node.js 适合做什么项目?
196 5
|
13天前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
29天前
|
JavaScript Linux 网络安全
VS Code远程调试Nodejs项目
VS Code远程调试Nodejs项目
|
2月前
|
JavaScript 应用服务中间件 Linux
宝塔面板部署Vue项目、服务端Node___配置域名
本文介绍了如何使用宝塔面板在阿里云服务器上部署Vue项目和Node服务端项目,并配置域名。文章详细解释了安装宝塔面板、上传项目文件、使用pm2启动Node项目、Vue项目打包上传、以及通过Nginx配置域名和反向代理的步骤。
365 0
宝塔面板部署Vue项目、服务端Node___配置域名
|
2月前
|
JavaScript Linux 开发工具
如何将nodejs项目程序部署到阿里云服务器上
该文章详细描述了将Node.js项目部署到阿里云服务器的步骤,包括服务器环境配置、项目上传及使用PM2进行服务管理的过程。
|
3月前
|
JavaScript 关系型数据库 MySQL
node连接mysql,并实现增删改查功能
【8月更文挑战第26天】node连接mysql,并实现增删改查功能
50 3
|
3月前
|
JavaScript
成功解决node、node-sass和sass-loader版本冲突问题、不需要降低node版本。如何在vue项目中安装node-sass,以及安装node-sass可能遇到的版本冲突问题
这篇文章介绍了在Vue项目中安装node-sass和sass-loader时遇到的版本冲突问题,并提供了解决这些问题的方法,包括在不降低node版本的情况下成功安装node-sass。
成功解决node、node-sass和sass-loader版本冲突问题、不需要降低node版本。如何在vue项目中安装node-sass,以及安装node-sass可能遇到的版本冲突问题
|
3月前
|
数据采集 资源调度 JavaScript
Node.js 适合做高并发、I/O密集型项目、轻量级实时应用、前端构建工具、命令行工具以及网络爬虫和数据处理等项目
【8月更文挑战第4天】Node.js 适合做高并发、I/O密集型项目、轻量级实时应用、前端构建工具、命令行工具以及网络爬虫和数据处理等项目
55 5
|
3月前
|
JavaScript Java Python
【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
|
2月前
|
JavaScript
NodeJs的安装
文章介绍了Node.js的安装步骤和如何创建第一个Node.js应用。包括从官网下载安装包、安装过程、验证安装是否成功,以及使用Node.js监听端口构建简单服务器的示例代码。
NodeJs的安装