Nodejs Express 应用程序 - 将 MongoDb 光标转换为 JSON
Nodejs Express app - Converting MongoDb Cursor to JSON
我是运行ning node v6.11.2,我的MongoDB是3.4.7版本。
我有一个 MongoDB 有几个用户使用 passportjs 和 express-session 注册了会话。为了呈现显示名称、用户首选项等内容。我正在使用 EJS,如下所示:
<p>
<strong>id</strong>: <%= user._id %><br>
<strong>email</strong>: <%= user.local.email %><br>
<strong>password</strong>: <%= user.local.password %><br>
<strong>Display name</strong>: <%= user.info.displayname %><br>
<strong>Subjects</strong>: <%= user.info.subjects %><br>
</p>
呈现此 ejs 页面时,GET 请求引用会话中的用户,如下所示:
user: req.user
这对我现在尝试做的事情不起作用,因为它需要用户登录。我想要一个页面,我可以在其中显示注册用户,包括他们的显示名称,一些他们的偏好等(如 public 个人资料)。
我已经尝试(仅出于测试目的)在我的 app.js 文件中插入以下代码行:
console.log(db.users.find({}));
我希望这个 return 我的数据库中的所有对象(如果我 运行 它(没有 console.log)在我的 mongo shell),而是 return 是这样的游标:
Cursor {
_readableState:
ReadableState {
objectMode: true,
highWaterMark: 0,
buffer: BufferList { head: null, tail: null, length: 0 },
length: 0,
pipes: null,
pipesCount: 0,
flowing: null,
ended: false,
endEmitted: false,
reading: false,
sync: true,
needReadable: false,
emittedReadable: false,
readableListening: false,
resumeScheduled: false,
defaultEncoding: 'utf8',
ranOut: false,
awaitDrain: 0,
readingMore: false,
decoder: null,
encoding: null },
readable: true,
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
_opts: {},
_get: [Function: thunk] }
如何将其转换为 JSON?
在此先感谢您的帮助。
您可能想在 db.users.find({}).toArray()
中使用 toArray()
方法。这将 return 显示用户列表而不是光标。
我按如下方式修复:我在 get 请求中添加了几行代码:
User.find({}).exec(function(err, users) {
if (err) throw err;
res.render('mentors.ejs', {
'users': users
})
然后我可以按如下方式访问 JSON:
<% users.forEach(function (user) { %>
<p><%= user.info.displayname %></p>
<p><%= user.info.subjects %></p>
<% }) %>
这是另一个解决方案,尝试使用 .toArray() 实现异步、等待和转换为 promise,然后使用零数组索引 ([0]),
等待第一个输出
要了解更多,请浏览 github 中的示例源代码:(nodejs-express-mongobd-graqhql)
[https://github.com/barakaally/nodejs-express-graphql]
示例代码
数据库连接(db.js)
const MongoClient = require("mongodb").MongoClient;
const keys = require("../keys");
class Db {
constructor() { }
static async con() {
return (await MongoClient.connect("mongodb://localhost:27017/", { useUnifiedTopology: true })).db("eshop");
}
}
module.exports = Db;
控制器使用 Db 连接
const Db = require("../database/db");
class AuthController {
/**
* @typedef {{loginInput:{email:String,password:String}}} LoginInput
* @param {LoginInput} userInput
*
*/
static async auth(userInput) {
return (await (await Db.con()).collection("customers").find(userInput.loginInput).toArray())[0];
}
}
module.exports = AuthController;
我是运行ning node v6.11.2,我的MongoDB是3.4.7版本。 我有一个 MongoDB 有几个用户使用 passportjs 和 express-session 注册了会话。为了呈现显示名称、用户首选项等内容。我正在使用 EJS,如下所示:
<p>
<strong>id</strong>: <%= user._id %><br>
<strong>email</strong>: <%= user.local.email %><br>
<strong>password</strong>: <%= user.local.password %><br>
<strong>Display name</strong>: <%= user.info.displayname %><br>
<strong>Subjects</strong>: <%= user.info.subjects %><br>
</p>
呈现此 ejs 页面时,GET 请求引用会话中的用户,如下所示:
user: req.user
这对我现在尝试做的事情不起作用,因为它需要用户登录。我想要一个页面,我可以在其中显示注册用户,包括他们的显示名称,一些他们的偏好等(如 public 个人资料)。 我已经尝试(仅出于测试目的)在我的 app.js 文件中插入以下代码行:
console.log(db.users.find({}));
我希望这个 return 我的数据库中的所有对象(如果我 运行 它(没有 console.log)在我的 mongo shell),而是 return 是这样的游标:
Cursor {
_readableState:
ReadableState {
objectMode: true,
highWaterMark: 0,
buffer: BufferList { head: null, tail: null, length: 0 },
length: 0,
pipes: null,
pipesCount: 0,
flowing: null,
ended: false,
endEmitted: false,
reading: false,
sync: true,
needReadable: false,
emittedReadable: false,
readableListening: false,
resumeScheduled: false,
defaultEncoding: 'utf8',
ranOut: false,
awaitDrain: 0,
readingMore: false,
decoder: null,
encoding: null },
readable: true,
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
_opts: {},
_get: [Function: thunk] }
如何将其转换为 JSON? 在此先感谢您的帮助。
您可能想在 db.users.find({}).toArray()
中使用 toArray()
方法。这将 return 显示用户列表而不是光标。
我按如下方式修复:我在 get 请求中添加了几行代码:
User.find({}).exec(function(err, users) {
if (err) throw err;
res.render('mentors.ejs', {
'users': users
})
然后我可以按如下方式访问 JSON:
<% users.forEach(function (user) { %>
<p><%= user.info.displayname %></p>
<p><%= user.info.subjects %></p>
<% }) %>
这是另一个解决方案,尝试使用 .toArray() 实现异步、等待和转换为 promise,然后使用零数组索引 ([0]),
等待第一个输出要了解更多,请浏览 github 中的示例源代码:(nodejs-express-mongobd-graqhql)
[https://github.com/barakaally/nodejs-express-graphql]
示例代码 数据库连接(db.js)
const MongoClient = require("mongodb").MongoClient;
const keys = require("../keys");
class Db {
constructor() { }
static async con() {
return (await MongoClient.connect("mongodb://localhost:27017/", { useUnifiedTopology: true })).db("eshop");
}
}
module.exports = Db;
控制器使用 Db 连接
const Db = require("../database/db");
class AuthController {
/**
* @typedef {{loginInput:{email:String,password:String}}} LoginInput
* @param {LoginInput} userInput
*
*/
static async auth(userInput) {
return (await (await Db.con()).collection("customers").find(userInput.loginInput).toArray())[0];
}
}
module.exports = AuthController;