Coder Social home page Coder Social logo

Comments (9)

Kostanos avatar Kostanos commented on August 29, 2024 1

Actually I'm using the "module" type, here is a small shot of my code.

// eslint-disable-next-line import/no-unresolved
import { verifyIdToken } from 'web-auth-library/google';
import { v4 as uuidv4 } from 'uuid';
import { parseToken } from './helpers';

export default {
  /**
   *
   * @param {import("@cloudflare/workers-types/experimental").Request} request
   * @param {object} env
   * @param {import("@cloudflare/workers-types/experimental").ExecutionContext} _ctx
   * @returns {Promise<Response>}
   */
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
  async fetch(request, env, _ctx) {
    // Only accept a PUT request
    if (request.method !== 'PUT') {
      return new Response('{"error": "Bad request!"}');
    }
    let envCheck;
    if (!((envCheck = 'GOOGLE_CLOUD_CREDENTIALS') in env)) throw new Error(`Missing ${envCheck} environment variable`);
    if (!((envCheck = 'AUTH_KEY_SECRET') in env)) throw new Error(`Missing ${envCheck} environment variable`);
    if (!((envCheck = 'R2_BUCKET') in env)) throw new Error(`Missing ${envCheck} environment variable`);

    try {
      const idToken = parseToken(request);
    ...

BTW. I decided to give up with cloudflare server-less for the moment and will implement the traditional micro-services architecture with nodejs. I spent 3-4 days to make the following stack work together:

  • Cloudflare Worker
  • ES6
  • uuid
  • Firebase Auth
  • Cloudflare R2
  • Jest Unittests
  • GraphQL client

and I failed. I've tried both, wrangler dev and miniflare, each of them has its own issue...
There is so much workarounds and hacks need to be done to make it works.

With micro-services I can make it work in one day.

Thank you for your help anyway.

from miniflare.

aseure avatar aseure commented on August 29, 2024 1

Any news on this? I'm facing the same issue as @Kostanos:

And I'm also getting FetchError [ERR_NO_HANDLER]: No fetch handler defined and no upstream to proxy to specified.

from miniflare.

mrbbot avatar mrbbot commented on August 29, 2024

Hello! 👋 I think the issue here is the rm -rf ./dist in your build script. When Miniflare detects a change in your build watch path, it will trigger a rebuild but won't reload the worker. The worker is only reloaded when your script changes (Miniflare assumes this means the build has completed). However, in your case, you're removing the dist directory, so Miniflare thinks the build is done and tries to load an empty script with no fetch handler.

You should be able to fix this by removing the rm, since Rollup overwrites output files. This is definitely a bug though, Miniflare knows when the build actually finishes, so it should reload the worker then instead.

from miniflare.

mrbbot avatar mrbbot commented on August 29, 2024

Just released version 1.4.0 with this fix. Please let me know if you have any other issues or feedback. 😄

from miniflare.

evrys avatar evrys commented on August 29, 2024

Hmm, I'm still running into this issue on Windows with 1.4.1 (but not macos, where it works as expected). I run webpack and miniflare together with concurrently, the two processes look like this:

{
    "server-webpack": "webpack -w --config webpack.server.config.js",
    "server-miniflare": "miniflare --kv=STORE --watch --debug server/devdist/worker.js"
}

After any code change, all requests throw FetchError: no fetch handler responded

I don't thiink I'm removing devdist at any point, unless webpack does that by default somehow.

Ideally, I would prefer miniflare not to handle the build part and instead just watch the output, because it's faster DX to run webpack watch separately than to have miniflare reinvoke a webpack build from scratch each time (due to the startup overhead).

I think the problem might be that it reloads worker.js when webpack starts writing to it, instead of when it finishes? The log looks like this:

[server-webpack] webpack 5.56.0 compiled successfully in 95 ms
[server-miniflare] [mf:dbg] server\devdist\worker.js changed, reloading...
[server-miniflare] [mf:dbg] Reloading server\devdist\worker.js...
[server-miniflare] [mf:inf] Worker reloaded! (0B)
[server-webpack] asset worker.js 1.73 MiB [emitted] (name: worker) 1 related asset

from miniflare.

evrys avatar evrys commented on August 29, 2024

I've put in a pull request to fix this (at least for my particular scenario, hopefully also others) by using chokidar's awaitWriteFinish option to check that the file isn't actively in the process of being altered before reloading it.

from miniflare.

Kostanos avatar Kostanos commented on August 29, 2024

Hey, the issue seems to be very old, but I'm having the same problem.
Trying to make miniflare to work with ES6 module and no luck yet.
Tried with both, webpack and esbuild.

image

Any idea?

PS. removing build instructions and running with wrangler dev works as expected.

from miniflare.

mrbbot avatar mrbbot commented on August 29, 2024

Hey @Kostanos! It looks like you've got the -m flag enabled which expects a modules format (export default { fetch() { ... } }) Worker. I'm guessing you're using a service worker format (addEventListener("fetch", ...)) Worker instead. Try removing -m from your Miniflare command. 👍

from miniflare.

mxschumacher avatar mxschumacher commented on August 29, 2024

Hello - I'm struggling with the same issue when running npm run dev, which in my case is: miniflare --watch --debug --modules

I'm using wrangler 3.0.0 and am trying to make the module syntax work.

The NODE_OPTIONS=--experimental-vm-modules should only apply to API usage, e.g. not if you use miniflare as a CLI.

When I use wrangler dev --local, I run into the issue described here: cloudflare/workers-sdk#3262 - not sure whether they are related?

I would say we should reopen this thread.

from miniflare.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.