AlistGo/alist · error

[doubao_new] create folder failed: empty response

Error message

[doubao_new] create folder failed: empty response

What it means

Doubao_new create-folder empty-result error: the API responded successfully (Code=0) and the body matched CreateFolderResp, but no node in the response carried a usable token (Token/ObjToken/NodeToken all empty after the fallback scan of Entities.Nodes). The folder was apparently created but no identifier for it can be extracted.

Source

Thrown at drivers/doubao_new/util.go:266

			err,
		)
		return Node{}, fmt.Errorf(msg)
	}

	var node Node
	if len(resp.Data.NodeList) > 0 {
		if n, ok := resp.Data.Entities.Nodes[resp.Data.NodeList[0]]; ok {
			node = n
		}
	}
	if node.Token == "" {
		for _, n := range resp.Data.Entities.Nodes {
			node = n
			break
		}
	}
	if node.Token == "" && node.ObjToken == "" && node.NodeToken == "" {
		return Node{}, fmt.Errorf("[doubao_new] create folder failed: empty response")
	}
	if node.NodeToken == "" {
		if node.Token != "" {
			node.NodeToken = node.Token
		} else if node.ObjToken != "" {
			node.NodeToken = node.ObjToken
		}
	}
	if node.ObjToken == "" && node.Token != "" {
		node.ObjToken = node.Token
	}
	return node, nil
}

func (d *DoubaoNew) renameFolder(ctx context.Context, token, name string) error {
	if token == "" {
		return fmt.Errorf("[doubao_new] rename folder missing token")
	}

View on GitHub (pinned to 843d9dc814)

Solutions

  1. Retry the mkdir — transient empty responses occur
  2. Check whether the folder actually got created (list the parent); if yes, the token extraction is the problem, not creation
  3. Update the doubao_new driver — token field fallbacks (Token/ObjToken/NodeToken) have been extended as the API changed
  4. Capture the raw response body and report upstream so the new token field can be added
  5. Avoid characters in folder names that Doubao may normalize/reject
Defensive patterns

Strategy: validation

Validate before calling

// pre-check the decoded response carries an identifier
func hasNodeToken(n Node) bool {
    return n.Token != "" || n.ObjToken != "" || n.NodeToken != ""
}
// after decode:
if !hasNodeToken(node) {
    if folderExists(parent, name) { return lookupFolder(parent, name) }
    return Node{}, fmt.Errorf("create folder failed: empty response")
}

Type guard

func hasNodeToken(n Node) bool {
    return n.Token != "" || n.ObjToken != "" || n.NodeToken != ""
}

Try / catch

if err := createFolder(...); err != nil {
    if strings.Contains(err.Error(), "empty response") {
        // folder may exist despite the empty payload; resolve by name instead of failing
        if n, lerr := lookupByName(parent, name); lerr == nil { return n, nil }
    }
    return err
}

Prevention

When it happens

Trigger: CreateFolderResp where NodeList is empty, NodeList[0] missing from Entities.Nodes, and every Node entity lacking all three token fields — server-side anomaly, response shape change where tokens moved to a new field, or the 'create' actually being deduplicated into a pre-existing node represented differently.

Common situations: API change renaming token fields, folder name collision handling returning a reference node without tokens, partial server-side failure still returning Code=0, or A/B variants of the endpoint. Rare and typically affects all mkdir calls when it's a schema change.

Related errors


AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15). Data as JSON: /api/errors/7e443e9d23cd489c. Report an issue: GitHub.