www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - VibeD - undefinded identifier

reply holo <holosian gmail.com> writes:
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?
Jul 23
next sibling parent reply Seb <seb wilzba.ch> writes:
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.
Jul 23
parent holo <holosian gmail.com> writes:
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
Jul 23
prev sibling parent reply Mike Parker <aldacron gmail.com> writes:
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.
Jul 23
parent reply holo <holosian gmail.com> writes:
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
Jul 23
parent reply Seb <seb wilzba.ch> writes:
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?
Jul 23
parent holo <holosian gmail.com> writes:
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
Jul 23