我有一个node.js
模型,其中有一个名为keys的数组。在这个数组中,我有一堆对象。我需要在视图中将这些对象命名为。
以下是模型:
var mongoose = require('mongoose');
var website = require('./website');
var plm = require('passport-local-mongoose');
var accountSchema = new mongoose.Schema({
isPremium: Boolean,
accType: String,
websites: [],
keys: []
});
accountSchema.plugin(plm);
module.exports = mongoose.model('Account', accountSchema);
以下是观点:
<% include ./../partials/header.ejs %>
<h1>
<%= title %>
</h1>
<table class="table table-striped table-hover">
<tr>
<th>User</th>
<% if (user) { %>
<th>Actions</th>
<% } %>
</tr>
<% for(let i=0; i<users.length; i++){ let user = users[i] %>
<tr>
<td>
<%= user.username %>
</td>
<td>
<%= user.keys[i].name %>
</td>
<td>
<a href="/admin/edit/<%= i %>" class="btn btn-info">Edit</a>
<%#<a href="/admin/delete/i" class="btn btn-danger confirmation">Delete</a>%>
</td>
</tr>
<% } %>
</table>
<% include ./../partials/footer.ejs %>
我试图在注册过程中填充密钥,如下所示:
/* POST register */
router.post('/register', function(req, res, next) {
// use the Account model to create a new user with passport
Account.register(
new Account({
username: req.body.username,
isPremium: false,
websites: [
req.body.websiteOwned,
req.body.websiteCompet1,
req.body.websiteCompet2,
],
keys: [
{ name: 'Google', key: '' },
{ name: 'Built With', key: '' },
{ name: 'Check Host', key: '' },
{ name: 'Alexa', key: '' },
{ name: 'Facebook', key: '' },
{ name: 'Instagram', key: '' },
{ name: 'Moz', key: '' },
], // accType: 'admin',
}),
req.body.password,
function(err, account) {
if (err) {
// failure
console.log(err);
res.redirect('error', { title: 'Create Account Error' });
}
res.redirect('/login'); // success
}
);
});
有几件我不明白的事情。当我这样注册时,在视图中打印的所有内容都是:Object object
。
当我的模型是这样的时候:
var accountSchema = new mongoose.Schema({
isPremium: Boolean,
accType: String,
websites: [],
keys: [
{ name: String, key: String },
{ name: String, key: String },
{ name: String, key: String },
{ name: String, key: String },
{ name: String, key: String },
{ name: String, key: String },
{ name: String, key: String },
],
});
它打印出{ name: 'Google', key: '' }
这是好的,因为我有一个用户而i
是0.但是当我编辑我的视图时:
<% for(let i=0; i<users.length; i++){ let user = users[i]; %>
<tr>
<td>
<%= user.username %>
</td>
<td>
<% for(let j=0; j<keys.length; j++) { %>
<%= user.keys[j] %>
<% } %>
</td>
<td>
<a href="/admin/edit/<%= i %>" class="btn btn-info">Edit</a>
<%#<a href="/admin/delete/i" class="btn btn-danger confirmation">Delete</a>%>
</td>
</tr>
<% } %>
所以我在里面加了一个循环,它说keys is not defined
。所以我猜我在用范围弄乱了什么?
我的第二个问题是:当我尝试访问keys数组中对象的属性时,如下所示:user.keys[i].name
我收到此错误:Cannot read property 'name' of undefined
。
我做错了什么,我该如何解决?是否可以在实现中使用第一个模型(keys=[]
)?这将是更具前瞻性的。
答案 0 :(得分:0)
我不知道为什么,但是当我删除并添加它几次之后,mongoose突然将objectId
字段添加到数组中的所有7个对象。它适用于objectId
。如果有人理解这里发生的事情,我将不胜感激。