sdk-for-node icon indicating copy to clipboard operation
sdk-for-node copied to clipboard

🐛 Bug Report: NextJS middleware issues

Open xtheonexuk opened this issue 3 years ago • 4 comments
trafficstars

👟 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 protected]', 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?

  • [X] I checked and didn't find similar issue

🏢 Have you read the Code of Conduct?

xtheonexuk avatar Oct 19 '22 23:10 xtheonexuk

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

stnguyen90 avatar Oct 20 '22 00:10 stnguyen90

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 avatar Oct 20 '22 10:10 xtheonexuk

@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 avatar Oct 24 '22 18:10 stnguyen90

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

samk-dev avatar Dec 23 '23 03:12 samk-dev

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.

stnguyen90 avatar Apr 25 '24 21:04 stnguyen90