appwrite / sdk-for-node

[READ-ONLY] Official Appwrite Node.js SDK 🟢
https://appwrite.io
BSD 3-Clause "New" or "Revised" License
193 stars 34 forks source link

🐛 Bug Report: NextJS middleware issues #47

Closed xtheonexuk closed 2 months ago

xtheonexuk commented 1 year ago

👟 Reproduction steps

When I try to use appwrite in NextJS middleware I get the following error...

[Error: adapter is not a function] {
  code: undefined,
  type: undefined,
  response: undefined
}

My middleware.js file is as per the example on https://appwrite.io/docs/getting-started-for-server with my own server variables of course...

import { Client, Users, ID } from 'node-appwrite'

export function middleware() {
    const client = new Client()

    client.setEndpoint('https://appwrite.jadeyo.dev/v1').setProject('633***').setKey('0ac***')

    const users = new Users(client)

    let promise = users.create(ID.unique(), 'email@example.com', null, 'password')

    promise.then(
        function (response) {
            console.log(response)
        },
        function (error) {
            console.log(error)
        }
    )
}

My appwrite server is v:1.0.3.501 hosted on digital ocean using the built in docker image - not customised in any way. My local machine is Linux running node v18.11.0 My package.json is as follows...

{
    "name": "support.jadeyo.xyz",
    "version": "0.1.0",
    "private": true,
    "scripts": {
        "dev": "next dev",
        "build": "next build",
        "start": "next start",
        "lint": "next lint"
    },
    "dependencies": {
        "appwrite": "^10.1.0",
        "next": "12.3.1",
        "node-appwrite": "^8.1.0",
        "react": "18.2.0",
        "react-dom": "18.2.0"
    },
    "devDependencies": {
        "@fortawesome/fontawesome-pro": "^6.2.0",
        "@fortawesome/fontawesome-svg-core": "^6.2.0",
        "@fortawesome/pro-duotone-svg-icons": "^6.2.0",
        "@fortawesome/pro-light-svg-icons": "^6.2.0",
        "@fortawesome/pro-regular-svg-icons": "^6.2.0",
        "@fortawesome/pro-solid-svg-icons": "^6.2.0",
        "@fortawesome/react-fontawesome": "^0.2.0",
        "autoprefixer": "^10.4.12",
        "eslint": "8.25.0",
        "eslint-config-next": "12.3.1",
        "postcss": "^8.4.18",
        "tailwindcss": "^3.2.0"
    }
}

👍 Expected behavior

Account creation

👎 Actual Behavior

User account not created and error thrown

🎲 Appwrite version

Version 0.10.x

💻 Operating system

Linux

🧱 Your Environment

No response

👀 Have you spent some time to check if this issue has been raised before?

🏢 Have you read the Code of Conduct?

stnguyen90 commented 1 year ago

@xtheonexuk, sorry, there's not much for us to go on from this. You'll need to share more of your code for additional help.

xtheonexuk commented 1 year ago

Hi Steven

There is no more code - that is all! It's a fresh nextjs project with only a middleware.js file in the root dir #facepalm

stnguyen90 commented 1 year ago

@xtheonexuk it seems like this might be a problem with NextJS middlewares and axios. I don't think there's a quick fix for getting the node SDK to work in a NextJS middleware, but can you expand further on what you need to do (I'm assuming your middleware was just a test and you don't actually need to create a user in every request to your app).

samk-dev commented 6 months ago

@stnguyen90 I've had similar issue with Nuxt on Cloudflare Pages. That's because axios doesn't work on Edge/Workers. A work around is to use node fetch directly and it worked fine.

A future solution would be to migrate to https://github.com/unjs/ofetch is very tiny and framework agnostic like axios. If you guys are open I can give you a hand implementing ofetch.

stnguyen90 commented 2 months ago

In 1.5, you should be able to use https://github.com/appwrite/sdk-for-node/releases/tag/12.1.0-rc.4 in a NextJS middleware.