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

nodejs,使用,eggjs,创建,项目,接入,influxdb,完成,删改 · 浏览次数 : 47

小编点评

**Eggjs 特性:** * **约定结构:**框架提供基于约定的目录结构,简化开发流程。 * **插件机制:**提供丰富的功能扩展,例如数据库访问、模板引擎、Session 等。 * **MVC 架构:**遵循 MVC 的分层架构,使代码更加清晰易维护。 * **开发调试工具:**提供自动重启、自动刷新、自动测试等工具,加快开发效率。 * **部署方案:**提供多进程部署、负载均衡等方案,确保应用程序稳定运行。 **使用 egg 初始化项目:** 1. 安装 Node.js。 2. 使用 `npm init egg --type=simple` 命令初始化项目。 3. 在 VS Code 中创建项目并运行 `npm run dev` 命令启动开发环境。 **创建 user 表:** 1. 在 `app/model/user.js` 中创建 `User` 类。 2. 在 `User` 类中定义 `create`, `find`, `update` 和 `delete` 方法。 **编写增删改查接口:** 1. 在 `app/controller/home.js` 中创建 `HomeController` 类。 2. 在 `HomeController` 中编写增删改查接口。 3. 使用 `app.router` 注册路由并处理请求。

正文

转载请注明出处:

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

 

与nodejs使用eggjs创建项目,接入influxdb完成单表增删改查相似的内容:

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

转载请注明出处: 1.Eggjs 特性: Eggjs 是 Node.js 服务端应用开发框架,它提供了一套约定,使开发者能够快速搭建、开发和部署应用。以下是 Egg.js 的一些特性和作用: 框架内置了基于约定的目录结构、约定的扩展机制和一些常用的插件,可以帮助开发者快速搭建应用。 Egg.js 遵

创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作

本文为博主原创,转载请注明出处: 1.使用npm进行初始化 在本地创建项目的文件夹名称,如 node_test,并在该文件夹下进行黑窗口执行初始化命令 2. 安装 expres包和myslq依赖包 npm i express@4.17.1 mysql2@2.2.5 Express是一个流行的Web应

Nodejs 命令行调用 exec 与 spawn 差异

Nodejs 命令行调用 exec 与 spawn 差异 比如在前端工程项目中 Nodejs 要调用命令行命令如: yarn electron:build exec 调用 yarn 命令,为了能使命令行能实时打印输出正在编译的命令 以异步形式调用 exec 使用 stdout.on 方式监听标准输出

wxdown 公众号离线文章保存(GO语言开发)

简介 本来一开始用 nodejs 写的,考虑大小、易操作、高性能、跨平台以及环境等问题,我就想能不能搞个不需依赖开发语言环境就能运行的。所以我就选择 go并且它本身就具备以上优点。作者本身是java开发,第一次使用 go所以过程也是比较艰难,好在 GPT 在学习一门新的开发语言方面还是相当给力!

module.exports和exports,应该用哪个

> 在 Node.js 编程中,模块是独立的功能单元,可以在项目间共享和重用。作为开发人员,模块让我们的生活更轻松,因为我们可以使用模块来增强应用程序的功能,而无需亲自编写。它们还允许我们组织和解耦代码,从而使应用程序更易于理解、调试和维护。 在这篇文章中,我将介绍如何在 Node.js 中使用模块

如何使用 Node.js Stream API 减少服务器端内存消耗?

摘要:让我们看一个示例,展示在内存消耗方面,采用流的编程思路带来的巨大优越性。 本文分享自华为云社区《使用 Node.js Stream API 减少服务器端内存消耗的一个具体例子》,作者:Jerry Wang 。 HTTP 响应对象(上面代码中的 res)也是一个可写流。这意味着如果我们有一个表示

如何使用zx编写shell脚本

前言 在这篇文章中,我们将学习谷歌的zx库提供了什么,以及我们如何使用它来用Node.js编写shell脚本。然后,我们将学习如何通过构建一个命令行工具来使用zx的功能,帮助我们为新的Node.js项目引导配置。 编写Shell脚本的问题 创建一个由Bash或者zsh执行的shell脚本,是自动化重

docker swarm 使用详解

转载请注明出处: 1.docker swarm 的组成架构 一个基本的docker swarm 的架构如下: 它主要包含这几个核心组件: Manager节点(Manager Nodes): 管理节点是Swarm集群的控制中心,负责整个集群的管理和调度。Swarm可以有一个或多个Manager节点,其

vue中key使用的问题

前言 在vue要求在遍历的时候最好加上key,在使用过程中总有些疑问,在这里做下分析 1.不使用key的时候vue是怎么处理的 在vue2.x文档中有如下描述 key 的特殊 attribute 主要用在 Vue 的虚拟 DOM 算法,在新旧 nodes 对比时辨识 VNodes。如果不使用 key

玩转服务器之网站篇:新手使用WordPress搭建博客和静态网站部署

在之前的玩转服务器系列文章里,我们介绍了如何构建小型的高可用环境、PHP、Python、Java web、docker环境部署,以及Node.js SSR应用,本篇文章主要介绍新手也能快速上手的WordPress博客搭建和静态网站部署的教程