honojs / examples Goto Github PK
View Code? Open in Web Editor NEWExamples using Hono.
Home Page: https://hono.dev
Examples using Hono.
Home Page: https://hono.dev
Hi,
Good job on Hono!
Followed this hono-example-blog example.
The route will become /post/post, not /post.
Index.ts should have this instead, think it would fix it.
app.route('/', middleware)
app.route('/', api)
Am I wrong? Please explain to me in that case how you're suppose to you app.route correct.
I am using hono
(v3.12.6) in some personal projects lately, it is simple and fun, but when it comes to file handling, I am having some trouble and was not able to figure it out.
I followed the instructions here
but with no results :
// ... handlers
.post('/:id/file', async (ctx: AppAuthContext) => {
const user = ctx.get('user');
const projectId = ctx.req.param('id');
const parsed = await ctx.req.parseBody();
const file = parsed['file'] as File;
const form = await ctx.req.formData();
const body = {
type: form.get('type') as ProjectType,
};
const json = await createProjectFile(user, projectId, file, body);
return ctx.json(json);
});
and this is my postman request :
Maybe this is not the correct place for this issue, but I think that a clear example can prevent a lot of headaches.
Thank you.
hello,
Thanks for the amazing hono.js.
would it be possible to update the examples to match v4 syntax?
I'm particularly having issues withserveStatic
, among other things.
I'm trying to create a middleware which will convert post request body json from camel case to snake case, then response body json from snake case to camel case. The first part is OK, but I'm struggling with the second part. I raised it here, as I also thought it would be nice to add it to the examples. This is what I have so far:
import camelcaseKeys from 'camelcase-keys';
import snakecaseKeys from 'snakecase-keys';
function tryParseJSONObject (jsonString: string) {
try {
var o = JSON.parse(jsonString);
if (o && typeof o === "object") {
return o;
}
}
catch (e) { return e }
return undefined
}
app.use('*', async (c, next) => {
if (c.req.method === 'POST') {
let bodyText = await c.req.raw.clone().text()
let jsonObj = tryParseJSONObject(bodyText)
if (jsonObj && !(jsonObj instanceof Error)) {
c.json(snakecaseKeys(jsonObj))
}
}
await next()
try {
let body = await c.res.json()
if (body) {
// How do I set the response body json and avoid potential issues using cloning?
}
} catch(e) {}
})
The static example works great.
import { Hono } from 'hono'
import { serveStatic } from 'hono/cloudflare-workers'
import manifest from '__STATIC_CONTENT_MANIFEST'
const app = new Hono()
app.get('/static/*', serveStatic({ root: './', manifest }))
app.use('/favicon.ico', serveStatic({ path: './favicon.ico', manifest }))
app.get('/', (c) => c.text('This is Home! You can access: /static/fallback.txt'))
Is there a way to get vitest
or jest
to stop complaining about __STATIC_CONTENT_MANIFEST
?
Error: Failed to load url __STATIC_CONTENT_MANIFEST (resolved id: __STATIC_CONTENT_MANIFEST) in foo.test.js. Does the file exist?
โฏ loadAndTransform node_modules/vite/dist/node/chunks/dep-C-KAszbv.js:53848:21
How can you encrypt keys to later validate with jwt, I tried with bcrypt but it gave me errors
Maybe this is too Cloudflare-specific for Hono, but it would be awesome to have something like itty-durable that makes integrating with Durable Objects type-safe and seamless, then Hono would truely be a full stack framework! (hono client + rpc + hono-do ๐ )
Are there any example of modern-monorepo-stack (pnpm and turborepo) using Hono RPC?
If not, I want to add!
Did this still the type of client is unkonw. Ran pnpm install and restrated the server.
@yusukebe Is it possible to use Hono with the new Next.js app directory? If so, do you have some example?
Thank you for your excellent work
I can get the other examples works but when I run yarn dev
on the blog example, I get:
Running custom build: yarn run build
Usage Error: Couldn't find a script named "build".
$ yarn run [--inspect] [--inspect-brk] [-T,--top-level] [-B,--binaries-only] <scriptName> ...
โ [ERROR] Command failed with exit code 1: yarn run build
Hey,
I really like hono, and I'd love to see how I can use it with cloudflare queue ? And Cron ?
Maybe some simple example would be super nice
A full example
It does a whole bunch of stuff like support oauth, email sending using Amazon SES, permissions, rate limiter using durable objects, SQL database using PlanetScale
https://github.com/OultimoCoder/cloudflare-planetscale-hono-boilerplate
It might be worth linking to as a larger example? But if not don't worry about it.
From honojs/hono#606 the issue is still valid
Tested with:
/bun/tsconfig.json
from:
{
"compilerOptions": {
"jsx": "react-jsx",
"jsxFragmentFactory": "Fragment",
"jsxImportSource": "hono/jsx"
}
}
to:
{
"compilerOptions": {
"jsx": "preserve",
"jsxFragmentFactory": "Fragment",
"jsxImportSource": "hono/jsx"
}
}
Option 'jsxFragmentFactory' cannot be specified without specifying option 'jsxFactory'.
Which can be solved by adding "jsxFactory": "jsx",
Hello Hono Maintainers,
I am the creator of a code-first server framework called Pylon for building GraphQL APIs. Pylon simplifies the process by allowing developers to define any TypeScript functions, which Pylon then analyzes to automatically generate a GraphQL API. This approach eliminates the need to write any schema.
I believe it would be beneficial to include an example project in the Hono repository to demonstrate how Pylon leverages Hono and how it can be extended directly with Hono.
This example project would serve as a starter kit for building GraphQL APIs with Hono in an easy and streamlined manner using Pylon. I think this integration could greatly benefit both the Hono and Pylon communities by providing a practical, ready-to-use example.
For more details on how Pylon uses Hono, you can refer to the Pylon documentation and the specific Hono integration section.
If you are interested, I would be happy to prepare and submit a pull request with the example implementation.
Thank you for your consideration.
Looking at https://github.com/honojs/examples/blob/main/durable-objects/src/counter.ts, I wanted to try something that makes a Durable Object feel more like a stateless application but with a c.state
property. So I came up with this:
const app = new HonoObject()
const getValue = async (storage: DurableObjectStorage) => await storage.get<number>('value') || 0
app.get('/increment', async (c) => {
const { storage } = c.state
const newVal = 1 + await getValue(storage);
storage.put('value', newVal)
return c.text(newVal.toString())
})
app.get('/decrement', async (c) => {
const { storage } = c.state
const newVal = -1 + await getValue(storage);
storage.put('value', newVal)
return c.text(newVal.toString())
})
app.get('/', async c => {
const value = await getValue(c.state.storage)
return c.text(value.toString())
})
export { app as Counter }
I found a mistake in the usage commands.
This command does not work.
Lines 25 to 27 in 284f11c
-yarn run install
+yarn install
pages-stack
is a really helpful example, but when I run it I get:
โฒ [WARNING] Specifying a `-- <command>` or `--proxy` is deprecated and will be removed in a future version of Wrangler.
is there a more up to date example available?
Hi, getting this error in the browser when I try to run the page-stack example:
Also getting this error on http://127.0.0.1:8788/
It'd be great if there was an official example of how to use Taiwlind with Hono. It's a frequently asked topic on the Discord server.
For example, following the usual docs for getting Tailwind to work in dev on Cloudflare Pages works fine. However, I can't figure out how to get the CSS file to be created in a production build.
Hi, i'm just curious why do you export this fetch? Is it documented somewhere?
Line 40 in cbe7bf7
Here is the code in question, modify from cloudflare durable objects example.
The version of Hono is 4.2.7, and wrangler is 3.52.0.
import { DurableObject } from 'cloudflare:workers';
import { Hono } from 'hono';
export type Bindings = {
COUNTERS: DurableObjectNamespace<Counter>;
}
const app = new Hono<{ Bindings: Bindings }>();
app.get('*', async (c) => {
const id = c.env.COUNTERS.idFromName('A');
const obj = c.env.COUNTERS.get(id);
// obj.getCounterValue should be an async function
console.log(obj.getCounterValue); // output: null
const value = await obj.getCounterValue();
return c.text(`Count is ${value}`);
});
export default app;
// Durable Object
export class Counter extends DurableObject {
async getCounterValue() {
const value = (await this.ctx.storage.get('value')) || 0;
return value;
}
async increment(amount = 1) {
let value: number = (await this.ctx.storage.get('value')) || 0;
value += amount;
await this.ctx.storage.put('value', value);
return value;
}
async decrement(amount = 1) {
let value: number = (await this.ctx.storage.get('value')) || 0;
value -= amount;
await this.ctx.storage.put('value', value);
return value;
}
}
obj.getCounterValue
should be an async function, but I got null
instead. vscode intellisense tells me obj.getCounterValue
has the type of never
, so I assume hono messed something up during the process.
@yusukebe , is there an interest in my adding another blog type web app in the examples folder?
The current is api based, while the one I have renders html using simple interpolated strings.
the app also uses postgres for the data.
TypeError [ERR_INVALID_ARG_TYPE]: The "strategy" argument must be of type object. Received type number (0)
at new ReadableStream (node:internal/webstreams/readablestream:254:5)
at safeReadableStreamFrom (/Users/hongling/hands-dirty/hono/examples/node_modules/miniflare/dist/src/index.js:8358:10)
at #handleLoopback (/Users/hongling/hands-dirty/hono/examples/node_modules/miniflare/dist/src/index.js:8520:36)
at Server.emit (node:events:531:35)
at parserOnIncoming (node:_http_server:1137:12)
at HTTPParser.parserOnHeadersComplete (node:_http_common:119:17) {
code: 'ERR_INVALID_ARG_TYPE'
}
Do you have any relevant examples?
In the blog example you can use getMiniflareBindings()
to get access to the global env variables. I am trying to do the same thing in my project but can't replicate the functionality.
bindings.d.ts file:
export interface Bindings {
ENV: string
MYSQL_URL: string
JWT_SECRET: string
JWT_ACCESS_EXPIRATION_MINUTES: number
JWT_REFRESH_EXPIRATION_DAYS: number
JWT_RESET_PASSWORD_EXPIRATION_MINUTES: number
JWT_VERIFY_EMAIL_EXPIRATION_MINUTES: number
}
declare global {
function getMiniflareBindings(): Bindings
}
Trying to use it:
const env = getMiniflareBindings()
Error:
ReferenceError: getMiniflareBindings is not defined
build.js:
import { build } from 'esbuild'
try {
await build({
entryPoints: ['./src/index.ts'],
bundle: true,
outdir: './dist/',
sourcemap: true,
minify: true
})
} catch(err) {
process.exitCode = 1;
}
tsconfig.json:
{
"compilerOptions": {
"allowJs": true,
"target": "esnext",
"lib": ["esnext"],
"moduleResolution": "node",
"resolveJsonModule": true,
"inlineSourceMap": true,
"module": "esnext",
"esModuleInterop": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"strict": true,
"noImplicitAny": true,
"noEmit": true,
"types": [
"@cloudflare/workers-types",
"@types/bcryptjs"
]
},
"ts-node": {
"transpileOnly": true
},
"include": ["./src/**/*", "bindings.d.ts"]
}
Any idea what I am doing wrong?
Hi, I'm newer to hono and cloudflare workers. In the jsx-ssr example, I add some code to get value from the KV storage.
A error happens: TypeError: Cannot read properties of undefined (reading 'get')
.
And I out put the c.env
and it is empty: {}
.
Is there something wrong?
I'm currently working on integrating Hono with Cloudflare Durable Objects following this example: Hono Example. However, I've run into a snag and need some help troubleshooting.
My implementation, which is essentially a replica of the original example, can be found here: My Hono Implementation.
When I run the worker and send requests to port 8787 (where the worker runs, I have confirmed) I see 404 not found for all routes '/', '/increment', '/decrement'. What could be the reason? In general how else can I test if the do works?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.