jester
jester copied to clipboard
Extended routes that return json doesn't compile
OS: Mac
Nimble:
# Dependencies
requires "nim >= 1.0.4", "jester"
If I have all code in a single file:
import jester, json
routes:
get "/":
var jsonResp = $(%*{"id": 2})
resp Http200, jsonResp
It compiles and gets the expected output.
Now if I split this into two files:
main.nim
import jester
import api
routes:
extend apiv1, "/api/v1"
and api.nim ( in the same folder)
import jester, json
router apiv1:
get "/":
var jsonResp = %*{"id": 2}
echo jsonResp
resp Http200, "hello"
Then it doesn't compile. The errors are:
jester.nim(1277, 9) Hint: Asynchronous route: apiv1. [User]
jester.nim(797, 9) Hint: 'settings' is declared but not used [XDeclaredButNotUsed]
jester.nim(1307, 26) Hint: 'apiv1ErrorHandler' is declared but not used [XDeclaredButNotUsed]
jester.nim(1280, 7) Hint: 'apiv1' is declared but not used [XDeclaredButNotUsed]
jester.nim(1277, 9) Hint: Asynchronous route: match. [User]
jester.nim(1283, 35) template/generic instantiation of `async` from here
/server/src/api.nim(5, 20) Error: undeclared identifier: '%*'
Did you try to access localhost:5000/api/v1 ? In my case it worked with the extra / at the end only. So if you do localhost:5000/api/v1/ you might get that response
Not really sure we can do much here in jester, it's more of a Nim limitation. You can export json in api.nim to work around it.
What is more frustrating is that the error reported under Nim1.6.2 may no longer be "error: unknown identifier:", but become a more puzzling "error: unhandled exception: index 12 not in 0.. 11 [indexdefect]". When I first encountered this problem, I even began to doubt the reliability of Nim language. Fortunately, I finally found that the problem lies in import through compiling Nim1.4.9 myself. Now I think the only feasible way is to use include instead of import for extended routes module.
In addition, the following questions may be relevant: https://github.com/dom96/jester/issues/178