worktop 是面向 Cloudflare Workers 的下一代 Web 框架。
特性:
async
/await
处理程序import { Router } from 'worktop'; import * as Cache from 'worktop/cache'; import { uid as toUID } from 'worktop/utils'; import { read, write } from 'worktop/kv'; import type { KV } from 'worktop/kv'; declare var DATA: KV.Namespace; interface Message { id: string; text: string; // ... } // Initialize const API = new Router(); API.add('GET', '/messages/:id', async (req, res) => { // Pre-parsed `req.params` object const key = `messages::${req.params.id}`; // Assumes JSON (can override) const message = await read<Message>(DATA, key); // Alter response headers directly res.setHeader('Cache-Control', 'public, max-age=60'); // Smart `res.send()` helper // ~> automatically stringifies JSON objects // ~> auto-sets `Content-Type` & `Content-Length` headers res.send(200, message); }); API.add('POST', '/messages', async (req, res) => { try { // Smart `req.body` helper // ~> parses JSON header as JSON // ~> parses form-like header as FormData, ...etc var input = await req.body<Message>(); } catch (err) { return res.send(400, 'Error parsing request body'); } if (!input || !input.text.trim()) { return res.send(422, { text: 'required' }); } const value: Message = { id: toUID(16), text: input.text.trim(), // ... }; // Assumes JSON (can override) const key = `messages::${value.id}`; const success = await write<Message>(DATA, key, value); // ^ boolean // Alias for `event.waitUntil` // ~> queues background task (does NOT delay response) req.extend( fetch('https://.../logs', { method: 'POST', headers: { 'content-type': 'application/json '}, body: JSON.stringify({ success, value }) }) ); if (success) res.send(201, value); else res.send(500, 'Error creating record'); }); API.add('GET', '/alive', (req, res) => { res.end('OK'); // Node.js-like `res.end` }); // Attach "fetch" event handler // ~> use `Cache` for request-matching, when permitted // ~> store Response in `Cache`, when permitted Cache.listen(API.run);
Granite worktops could be ideally suited for your kitchen and bathroom requirements. To help you decide we have prepared some guidelines. Granite has a polished surface which will retain its polish an
先讲 Node.js 基础,然后 Koa 框架(从Koa-generator开始),理解一些基础概念,调试,测试等,然后讲解 http 相关知识,比如 get、post、上传如何实现,如果使用form实现, ajax 实现,如何 koa 实现,如果使用 cli curl 命令测试,如何使用 chrome 的 postman 插件测试,如果使用 supertest 来测试 api。
Koa是什么? Koa是Node.js下一代web框架 官方介绍 Expressive HTTP middleware for node.js to make web applications and APIs more enjoyable to write. Koa's middleware stack flows in a stack-like manner, allowing you to
本章重点介绍Web框架及其部署。 PyCharm具有部署代码和文件的简单功能。 要使用PyCharm部署代码,我们需要添加一个带有菜单选项Settings -》 Build, Execution-》 Deployment的Web服务器。 现在,包括部署项目所需的各种配置的所有设置。 在Mappings选项卡中,用户可以指定本地代码的位置以及远程复制到何处。 可以使用Tools -》 Deploym
tornado.web — RequestHandler and Application classes Thread-safety notes Request handlers Entry points Input Output Cookies Other Application configuration Decorators Everything else tornado.template
前面十二章介绍了如何通过Go来开发Web应用,介绍了很多基础知识、开发工具和开发技巧,那么我们这一章通过这些知识来实现一个简易的Web框架。通过Go语言来实现一个完整的框架设计,这框架中主要内容有第一小节介绍的Web框架的结构规划,例如采用MVC模式来进行开发,程序的执行流程设计等内容;第二小节介绍框架的第一个功能:路由,如何让访问的URL映射到相应的处理逻辑;第三小节介绍处理逻辑,如何设计一个公
本章重点介绍Web框架及其部署。 PyCharm具有部署代码和文件的简单功能。 要使用PyCharm部署代码,我们需要添加一个带有菜单选项:Settings -> Build, Execution -> Deployment 来部署Web服务器。 现在,包含部署项目所需的各种配置的所有设置。 在Mappings 选项卡中,用户可以指定本地代码的位置以及它应该远程复制到的位置。 代码可以使用工具菜单
问题内容: 我将部署我的node.js应用程序。 我可以仅使用node.js来启动自己的Web应用程序。 但是我的父亲告诉我,最好在apache或nginx下提供该Web应用程序。 任何人都有这样的经验,为什么我们需要apache,因为我只能在node.js + express上启动我的Web应用程序? 我想了解更多有关部署方面的知识。谢谢你的帮助。 套件 问题答案: 在未开发的应用程序中,将Ap
22. Web MVC框架