首页 > 其他分享 >hyperexpress框架/使用uwebsockets.js核心

hyperexpress框架/使用uwebsockets.js核心

时间:2024-01-19 23:33:24浏览次数:26  
标签:function res app req uwebsockets js hyperexpress async import

import  {  scheduleJob  }  from  'node-schedule';

//  定时任务
function  setupScheduledTasks()  {
    //  每6秒执行一次
    setInterval(()  =>  {
      taskEverySixSeconds();
    },  6000);

    //  每33分钟执行一次
    setInterval(()  =>  {
      taskEveryThirtyThreeMinutes();
    },  33  *  60  *  1000);

    //  每天的1点到5点之间执行
    scheduleJob('0  *  1-5  *  *  *',  taskEarlyMorning);
}

//  示例任务函数
function  taskEverySixSeconds()  {
    console.log('Running  task  every  6  seconds');
}

function  taskEveryThirtyThreeMinutes()  {
    console.log('Running  task  every  33  minutes');
}

function  taskEarlyMorning()  {
    console.log('Running  early  morning  task');
}

//  在main函数中调用
setupScheduledTasks();
app.all('/*',  (req,  res)  =>  {
    res.setHeader('Access-Control-Allow-Origin',  '*');
    res.setHeader('Access-Control-Allow-Methods',  'GET,  POST,  PUT,  DELETE');
    res.setHeader('Access-Control-Allow-Headers',  'Content-Type,  Authorization');
    if  (req.method  ===  'OPTIONS')  {
      res.status(204).end();
    }  else  {
      res.next();
    }
});
import  {  verifyToken  }  from  './auth';  //  假设你有一个auth模块来处理token验证

app.use(json(),  (req,  res,  next)  =>  {
    const  token  =  req.header('Authorization')?.replace('Bearer  ',  '');
    if  (token)  {
      try  {
        const  userInfo  =  verifyToken(token);  //  verifyToken应该返回用户信息或抛出错误
        req.userInfo  =  userInfo;  //  将用户信息写入请求对象
        next();
      }  catch  (error)  {
        res.status(401).json({  error:  'Invalid  token'  });
      }
    }  else  {
      res.status(401).json({  error:  'No  token  provided'  });
    }
});
npm  install  node-schedule
npm  install  cors

在这个示例中,我使用了cors中间件来处理跨域请求,而不是手动设置CORS头。这是一个更简洁的方法,因为它会自动处理预请求(preflight)和其他CORS相关的复杂性。

确保你已经定义了taskEverySixSecondstaskEveryThirtyThreeMinutes,和taskEarlyMorning函数,它们将包含你的业务逻辑。

同时,verifyToken函数应该是你在一个单独的文件中定义的,比如auth.ts,它接受一个token,验证它,并返回用户信息或抛出错误。这里的中间件会检查请求头中的Authorization字段,并尝试解析和验证token。如果验证成功,用户信息将被附加到req.userInfo

import  {  serve  }  from  'hyperexpress';
import  {  connectToDatabase  }  from  './db';
import  {  setupRoutes  }  from  './routes';
import  {  json  }  from  'hyperexpress';
import  {  setInterval  }  from  'timers';
import  schedule  from  'node-schedule';
import  cors  from  'cors';

const  app  =  serve();

//  跨域处理
app.use(cors({
    origin:  '*',  //  或者配置具体的允许域名
    methods:  'GET,  POST,  PUT,  DELETE',
    allowedHeaders:  'Content-Type,  Authorization'
}));

app.use(json());

//  Token验证中间件
app.use((req,  res,  next)  =>  {
    const  token  =  req.headers.authorization?.split('  ')[1];  //  获取Bearer后面的Token
    if  (token)  {
      try  {
        const  userInfo  =  verifyToken(token);  //  假设verifyToken是一个解析Token并返回用户信息的函数
        req.userInfo  =  userInfo;  //  将用户信息写入请求对象
        next();
      }  catch  (error)  {
        res.status(401).json({  error:  'Invalid  token'  });
      }
    }  else  {
      next();  //  如果没有Token,可以选择继续或者返回错误
    }
});

//  设置路由
setupRoutes(app);

//  定时任务
function  setupScheduledTasks()  {
    //  每6秒执行一次
    setInterval(()  =>  {
      taskEverySixSeconds();
    },  6000);

    //  每33分钟执行一次
    setInterval(()  =>  {
      taskEveryThirtyThreeMinutes();
    },  33  *  60  *  1000);

    //  每天的1点到5点之间执行
    const  rule  =  new  schedule.RecurrenceRule();
    rule.hour  =  [1,  5];  //  每天的1点到5点
    rule.minute  =  0;  //  每小时的开始
    schedule.scheduleJob(rule,  taskEarlyMorning);
}

//  示例任务函数
function  taskEverySixSeconds()  {
    console.log('Running  task  every  6  seconds');
    //  你的业务逻辑
}

function  taskEveryThirtyThreeMinutes()  {
    console.log('Running  task  every  33  minutes');
    //  你的业务逻辑
}

function  taskEarlyMorning()  {
    console.log('Running  early  morning  task');
    //  你的业务逻辑
}

async  function  main()  {
    await  connectToDatabase();
    setupScheduledTasks();  //  设置定时任务
    await  app.listen(3000);
    console.log('Server  is  running  on  port  3000');
}

main();

npm  install  hyperexpress  @deepkit/orm  @deepkit/orm-postgres-driver  pg

//  src/entity/User.ts

import  {  Entity,  PrimaryKey,  Property  }  from  '@deepkit/orm';

@Entity()
export  class  User  {
    @PrimaryKey()
    id:  number;

    @Property()
    name:  string;

    @Property()
    email:  string;
}
//  src/db.ts

import  {  DeepKitConnection  }  from  '@deepkit/orm';
import  {  User  }  from  './entity/User';

export  const  connection  =  new  DeepKitConnection({
    type:  'postgres',
    host:  'localhost',
    port:  5432,
    username:  'your_username',
    password:  'your_password',
    database:  'your_database',
    entities:  [User],
});

export  async  function  connectToDatabase()  {
    await  connection.connect();
}

4. 创建服务
创建用户服务来处理业务逻辑:

//  src/service/UserService.ts

import  {  Repository  }  from  '@deepkit/orm';
import  {  User  }  from  '../entity/User';

export  class  UserService  {
    userRepository:  Repository<User>;

    constructor()  {
      this.userRepository  =  connection.getRepository(User);
    }

    async  createUser(userData:  Partial<User>):  Promise<User>  {
      const  user  =  this.userRepository.create(userData);
      await  this.userRepository.persistAndFlush(user);
      return  user;
    }

    async  findAllUsers():  Promise<User[]>  {
      return  this.userRepository.find();
    }

    async  findUserById(id:  number):  Promise<User  |  null>  {
      return  this.userRepository.findOne({  id  });
    }

    async  updateUser(id:  number,  updatedData:  Partial<User>):  Promise<User  |  null>  {
      await  this.userRepository.update(id,  updatedData);
      return  this.userRepository.findOne({  id  });
    }

    async  deleteUser(id:  number):  Promise<void>  {
      await  this.userRepository.removeAndFlush({  id  });
    }
}

//  src/main.ts

import  {  serve  }  from  'hyperexpress';
import  {  connectToDatabase  }  from  './db';
import  {  setupRoutes  }  from  './routes';
import  {  json  }  from  'hyperexpress';

const  app  =  serve();

app.use(json());

//  Set  up  routes
setupRoutes(app);

async  function  main()  {
      await  connectToDatabase();
      await  app.listen(3000);
      console.log('Server  is  running  on  port  3000');
}

main();

//  src/routes.ts

import  {  app  }  from  './app';
import  {  UserService  }  from  './service/UserService';
import  {  json  }  from  'hyperexpress';

//  Helper  function  to  set  up  all  routes
export  function  setupRoutes(app:  ReturnType<typeof  serve>)  {
      const  userService  =  new  UserService();

      app.post('/users',  async  (req,  res)  =>  {
          try  {
              const  user  =  await  userService.createUser(req.body);
              res.status(201).json(user);
          }  catch  (error)  {
              res.status(500).json({  error:  error.message  });
          }
      });

      //  ...  Other  route  handlers
      //  Add  the  rest  of  the  route  handlers  here
      //  ...

      app.get('/users',  async  (req,  res)  =>  {
          //  ...  Route  handler  implementation
      });

      app.get('/users/:id',  async  (req,  res)  =>  {
          //  ...  Route  handler  implementation
      });

      app.put('/users/:id',  async  (req,  res)  =>  {
          //  ...  Route  handler  implementation
      });

      app.delete('/users/:id',  async  (req,  res)  =>  {
          //  ...  Route  handler  implementation
      });
}
//  src/app.ts

import  {  serve  }  from  'hyperexpress';

export  const  app  =  serve();

#  使用官方Node.js的基础镜像
FROM  node:lts

#  设置工作目录
WORKDIR  /usr/src/app

#  复制项目文件到工作目录
COPY  package*.json  ./

#  安装项目依赖
RUN  npm  install

#  复制项目文件到工作目录
COPY  .  .

#  暴露端口3000
EXPOSE  3000

#  启动应用程序
CMD  [  "npm",  "start"  ]

#  .dockerignore
node_modules
npm-debug.log


"scripts":  {
    "start":  "node  src/main.ts"
}


docker  build  -t  my-hyperexpress-app  .


docker  run  -p  3000:3000  my-hyperexpress-app


curl  http://localhost:3000/users

 

















标签:function,res,app,req,uwebsockets,js,hyperexpress,async,import
From: https://www.cnblogs.com/pearlcity/p/17975842

相关文章

  • 模块-包-commandJs
    模块、包、commandJs01为什么要有模块化开发? 在传统的nodejs代码开发中,把js文件拆分开来有很糟糕的编程体验,在开发者引入的js文件时,方法名相同时后者将覆盖前面的方法去执行 我们可以把公共的功能抽离成为一个单独的JS文件作为一个模块,默认情况下这个模块里面的方法或书写,......
  • Servlet(JSP)学习笔记
    目录IDEA配置JSP基本语法page指令ScriptLet标签注释包含跳转JSP四大作用域applicationsessionrequestpageJSP九大内置对象responseoutpageContextconfigexceptionJavaBean组件JavaBean组件引入创建JavaBean设置属性值获取属性值JavaBean的保存范围JavaBean的删除ServletHelloWorld......
  • uWebSockets.js 框架经验
    目录结构project/│├──src/│├──app.ts│├──routes/││├──userRoutes.ts││└──index.ts│├──entities/││└──User.ts│├──utils/││└──parseQuery......
  • telegraf解析嵌套json遇到的问题
    问题描述kafka中的数据格式如下:{"customerId":1652,"deviceId":"13011304383","timestamp":1705637828000,"parameters":{"acc":0,"locationStatus":1,&......
  • angularjs1.x 性能优化笔记
    1.bind-html父级页面如果使用bind-html进行绑定子级组件例如:<divbind-html='vm.template1'><divbind-html='vm.template2'><divbind-html='vm.template3'>如果需要根据某个属性判断是否展示对应vm.template(子级组件)务必将ng-if放置到外部的div上,而不是内部的顶层div里面......
  • 解决npm run start 和 node.js src/main.js 引用资源文件路径不一致问题
    解决npmrunstart和node.jssrc/main.js引用资源文件路径不一致问题问题描述写了一个node.js连接sqlite3数据库的项目,因为数据库sqlite3.db文件相对于根目录和src/main.js路径不一致,打包时总有一种方法失败分析原因数据库sqlite3.db文件是相对控制台运行命令的相对路径npmrun......
  • Python将JSON以表格数据格式导出
      本文介绍基于Python语言,读取JSON格式的数据,提取其中的指定内容,并将提取到的数据保存到.csv格式或.xlsx格式的表格文件中的方法。  JSON格式的数据在数据信息交换过程中经常使用,但是相对而言并不直观;因此,有时我们希望将JSON格式的数据转换为Excel表格文件数据;这里就介绍一下......
  • [js] 12位以内的数字转中文
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title&g......
  • net8操作appsettings.json类
    1、添回操作类文件AppSettings.csusingMicrosoft.Extensions.Configuration.Json;namespaceYYApi.Helper{///<summary>///appsettings.json操作类///</summary>publicclassAppSettings{publicstaticIConfigurationConfigu......
  • 普普通通入门js案例(原生)
    数组中数据的遍历 vararr=[34,3,4,3]; for(i=0;i<arr.length;i++){ console.log(arr[i]); }求数组中的最大值 vararr=[34,3,4,3]; max=arr[0]; for(i=1;i<arr.length;i++){ if(max<arr[i]){ max=arr[i]; } }求数组中的平......