appwrite / sdk-for-node

[READ-ONLY] Official Appwrite Node.js SDK 🟒

Home Page:https://appwrite.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

πŸ› Bug Report: NextJS middleware issues

xtheonexuk opened this issue Β· comments

πŸ‘Ÿ 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?

  • I checked and didn't find similar issue

🏒 Have you read the Code of Conduct?

@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.

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

@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).

@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.

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.