| Thread overview |
|---|
July 23, 2017 VibeD - undefinded identifier | ||||
|---|---|---|---|---|
| ||||
Hello
Im trying to create REST api for my simple web page. My code is looking like below:
module service.frontpage;
import vibe.d;
@path("/api")
interface IFrontPageAPI
{
Json getHome();
}
class FrontPageAPI : IFrontPageAPI
{
this(auto tmp)
{
auto collect = tmp;
}
Json getHome()
{
logInfo("Getting HomePage from DB");
Bson query = Bson(["_id" : Bson("homepage")]);
auto result = collect.find(query);
logInfo("Iterating results...");
foreach (i, doc; result.byPair)
logInfo("Item %d: %s", i, doc.toJson().toString());
return result.toJson();
}
}
But when i try to compile it im getting:
source/service/frontpage.d(15,3): Error: undefined identifier 'tmp', did you mean alias 'cmp'?
Did i miss something?
| ||||
July 23, 2017 Re: VibeD - undefinded identifier | ||||
|---|---|---|---|---|
| ||||
Posted in reply to holo | On Sunday, 23 July 2017 at 15:23:25 UTC, holo wrote: > Hello > > Im trying to create REST api for my simple web page. My code is looking like below: > > module service.frontpage; > > import vibe.d; > > @path("/api") > interface IFrontPageAPI > { > Json getHome(); > } > > class FrontPageAPI : IFrontPageAPI > { > > > this(auto tmp) > { > auto collect = tmp; > } > > Json getHome() > { > logInfo("Getting HomePage from DB"); > Bson query = Bson(["_id" : Bson("homepage")]); > auto result = collect.find(query); > > > logInfo("Iterating results..."); > foreach (i, doc; result.byPair) > logInfo("Item %d: %s", i, doc.toJson().toString()); > > return result.toJson(); > } > } > > But when i try to compile it im getting: > > source/service/frontpage.d(15,3): Error: undefined identifier 'tmp', did you mean alias 'cmp'? > > Did i miss something? You need to - use Class variables - use types instead auto (here Mongo collection) - return a proper Json Have a look at: https://is.gd/7AMsKs And play with it - no output means no complication error. | |||
July 23, 2017 Re: VibeD - undefinded identifier | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Seb | On Sunday, 23 July 2017 at 15:43:31 UTC, Seb wrote: > On Sunday, 23 July 2017 at 15:23:25 UTC, holo wrote: >> Hello >> >> Im trying to create REST api for my simple web page. My code is looking like below: >> >> module service.frontpage; >> >> import vibe.d; >> >> @path("/api") >> interface IFrontPageAPI >> { >> Json getHome(); >> } >> >> class FrontPageAPI : IFrontPageAPI >> { >> >> >> this(auto tmp) >> { >> auto collect = tmp; >> } >> >> Json getHome() >> { >> logInfo("Getting HomePage from DB"); >> Bson query = Bson(["_id" : Bson("homepage")]); >> auto result = collect.find(query); >> >> >> logInfo("Iterating results..."); >> foreach (i, doc; result.byPair) >> logInfo("Item %d: %s", i, doc.toJson().toString()); >> >> return result.toJson(); >> } >> } >> >> But when i try to compile it im getting: >> >> source/service/frontpage.d(15,3): Error: undefined identifier 'tmp', did you mean alias 'cmp'? >> >> Did i miss something? > > You need to > - use Class variables > - use types instead auto (here Mongo collection) > - return a proper Json > > Have a look at: https://is.gd/7AMsKs > > And play with it - no output means no complication error. Thank you it solves my problem, but now i'm getting: source/service/frontpage.d(28,30): Error: template std.array.byPair cannot deduce function from argument types !()(MongoCursor!(Bson, Bson, typeof(null))), candidates are: /usr/include/dlang/dmd/std/array.d(419,6): std.array.byPair(Key, Value)(Value[Key] aa) source/service/frontpage.d(21,10): Error: function frontpage.FrontPageAPI.getHome no return exp; or assert(0); at end of function What is strange it is just copy/paste from example: https://github.com/rejectedsoftware/vibe.d/blob/master/examples/mongodb/source/app.d | |||
July 23, 2017 Re: VibeD - undefinded identifier | ||||
|---|---|---|---|---|
| ||||
Posted in reply to holo | On Sunday, 23 July 2017 at 15:23:25 UTC, holo wrote:
> this(auto tmp)
You need to specify a type here instead of using auto.
| |||
July 23, 2017 Re: VibeD - undefinded identifier | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Mike Parker | On Sunday, 23 July 2017 at 16:27:40 UTC, Mike Parker wrote: > On Sunday, 23 July 2017 at 15:23:25 UTC, holo wrote: > >> this(auto tmp) > > You need to specify a type here instead of using auto. Thanks for reply i fix it. But right now im getting: ../../.dub/packages/vibe-d-0.7.31/vibe-d/source/vibe/http/server.d(286,33): Deprecation: alias diet.traits.FilterCallback is deprecated - Use SafeFilterCallback instead. source/service/frontpage.d(28,30): Error: template std.array.byPair cannot deduce function from argument types !()(MongoCursor!(Bson, Bson, typeof(null))), candidates are: /usr/include/dlang/dmd/std/array.d(419,6): std.array.byPair(Key, Value)(Value[Key] aa) source/service/frontpage.d(21,10): Error: function frontpage.FrontPageAPI.getHome no return exp; or assert(0); at end of function | |||
July 23, 2017 Re: VibeD - undefinded identifier | ||||
|---|---|---|---|---|
| ||||
Posted in reply to holo | On Sunday, 23 July 2017 at 16:37:19 UTC, holo wrote: > On Sunday, 23 July 2017 at 16:27:40 UTC, Mike Parker wrote: >> On Sunday, 23 July 2017 at 15:23:25 UTC, holo wrote: >> >>> this(auto tmp) >> >> You need to specify a type here instead of using auto. > > Thanks for reply i fix it. But right now im getting: > > ../../.dub/packages/vibe-d-0.7.31/vibe-d/source/vibe/http/server.d(286,33): Deprecation: alias diet.traits.FilterCallback is deprecated - Use SafeFilterCallback instead. > source/service/frontpage.d(28,30): Error: template std.array.byPair cannot deduce function from argument types !()(MongoCursor!(Bson, Bson, typeof(null))), candidates are: > /usr/include/dlang/dmd/std/array.d(419,6): std.array.byPair(Key, Value)(Value[Key] aa) What are you trying to do with byPair? It's only defined for the MongoCursor: http://vibed.org/api/vibe.db.mongo.cursor/MongoCursor.byPair That std.array.byPair shows up means that you are using it for something else? > source/service/frontpage.d(21,10): Error: function frontpage.FrontPageAPI.getHome no return exp; or assert(0); at end of function I guess you forgot a return here? Maybe it's easier to post your code again? | |||
July 23, 2017 Re: VibeD - undefinded identifier | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Seb | On Sunday, 23 July 2017 at 17:16:44 UTC, Seb wrote: > On Sunday, 23 July 2017 at 16:37:19 UTC, holo wrote: >> On Sunday, 23 July 2017 at 16:27:40 UTC, Mike Parker wrote: >>> On Sunday, 23 July 2017 at 15:23:25 UTC, holo wrote: >>> >>>> this(auto tmp) >>> >>> You need to specify a type here instead of using auto. >> >> Thanks for reply i fix it. But right now im getting: >> >> ../../.dub/packages/vibe-d-0.7.31/vibe-d/source/vibe/http/server.d(286,33): Deprecation: alias diet.traits.FilterCallback is deprecated - Use SafeFilterCallback instead. >> source/service/frontpage.d(28,30): Error: template std.array.byPair cannot deduce function from argument types !()(MongoCursor!(Bson, Bson, typeof(null))), candidates are: >> /usr/include/dlang/dmd/std/array.d(419,6): std.array.byPair(Key, Value)(Value[Key] aa) > > What are you trying to do with byPair? > It's only defined for the MongoCursor: http://vibed.org/api/vibe.db.mongo.cursor/MongoCursor.byPair > > That std.array.byPair shows up means that you are using it for something else? > >> source/service/frontpage.d(21,10): Error: function frontpage.FrontPageAPI.getHome no return exp; or assert(0); at end of function > > I guess you forgot a return here? > Maybe it's easier to post your code again? I took this code from example: https://github.com/rejectedsoftware/vibe.d/blob/master/examples/mongodb/source/app.d And it is looking right now like below: import vibe.d; import std.algorithm, std.array; @path("/api") interface IFrontPageAPI { Json getHome(); } class FrontPageAPI : IFrontPageAPI { this(MongoCollection tmp) { collect = tmp; } private: MongoCollection collect; public: Json getHome() { logInfo("Getting HomePage from DB"); Bson query = Bson(["_id" : Bson("homepage")]); auto result = collect.find(query); logInfo("Iterating results..."); foreach (i, doc; result.byPair) logInfo("Item %d: %s", i, doc.toJson().toString()); logInfo("Sending Json"); return Json(result.map!(a => a.toJson).array); } } When i remove this piece of code: logInfo("Iterating results..."); foreach (i, doc; result.byPair) logInfo("Item %d: %s", i, doc.toJson().toString()); everything is working as expecting. One more question, what it does mean: return Json(result.map!(a => a.toJson).array); Why we cant just use something like result.toJson? When i | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply