84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
1.api.js
2.db.js
3.vue
4.データベース
得られた結果は空の配列ですが、リンクとデータベースは両方とも正しいのですが、これはなぜですか? ? ?
ringa_lee
这个问题的症结如 @cheesekun 所说,是因为:mongoose会自动帮把 model 中的集合名(第一个参数)改为复数形式了。
这里我给出了自己的试验过程,并在下面提供了两种解决方案。
根据题主的意思首先创建了一个简单的项目
app.js
const express = require('express'); const app = express(); app.use('/api',require('./router/api')); app.listen(3000, () => { console.log('Server is running!'); });
module/db.js
const mongoose = require('mongoose'); mongoose.connect('mongodb://127.0.0.1:27017/test'); mongoose.connection .on('connected', _ => console.log('mongodb connect successed')) .on('error', _ => console.log('mongodb connect failed')) .on('disconnected', _ => console.log('mongodb connect disconnected')); const Schema = mongoose.Schema; const listSchema = new Schema({ name: String, age: Number }); const List = mongoose.model('list', listSchema); module.exports = { List }
router/api.js
const express = require('express'); const db = require('../module/db'); const router = express.Router(); router.get('/list', (req, res) => { db.List.find((err,data)=>{ if(err){ console.log(err); }else{ res.json(data); } }); }); module.exports = router;
通过 可视化工具 连接到 mongodb 预先在 test 数据库 list 集合下插入了一条文档
通过浏览器直接访问得到了 同题主一样的空数组
尝试插入一条文档到集合中
在 module/db.js 底部通过代码插入一条数据
const list = new List({ name: '代码创建的数据', age: 1 }); list.save(function (err, data) { console.log(data); });
重新运行,并通过浏览器访问,返回了通过代码插入的数据
此时通过 可视化工具 可以发现 多出了 lists 这个集合,而我们通过代码插入的数据就在其中
lists
如不明确指定集合名,mongoose会自动帮把 model() 中的第一个参数改为复数形式后作为集合名
提供两个解决方案,都是指定集合名
第一种:
给 mongoose.model() 传递第三个参数来指定集合名
const List = mongoose.model('list', listSchema,'list');
第二种:
给 Schema 传递第二个配置项来指定集合名
const listSchema = new Schema({ name: String, age: Number },{ collection: 'list' });
我赌5毛。mongoose定义model时,会给表名自动加s,而你的login和list都没有加s调用不到数据库这是我之前写的博客,最下面有提到mongoose深海巨坑
mongoose
你在res.send(data)加个console.log(data),看看可有结果
首先直接看控制台里xhr返回是否有值,如果有值就是你获取办法不对。
如果没有就是你压根没有把值发出去,说明问题出现在后端,再往回排查。
这个问题的症结如 @cheesekun 所说,是因为:mongoose会自动帮把 model 中的集合名(第一个参数)改为复数形式了。
这里我给出了自己的试验过程,并在下面提供了两种解决方案。
根据题主的意思首先创建了一个简单的项目
app.js
module/db.js
router/api.js
通过 可视化工具 连接到 mongodb 预先在 test 数据库 list 集合下插入了一条文档
发现问题
通过浏览器直接访问得到了 同题主一样的空数组
寻找原因
尝试插入一条文档到集合中
在
module/db.js
底部通过代码插入一条数据重新运行,并通过浏览器访问,返回了通过代码插入的数据
此时通过 可视化工具 可以发现 多出了
lists
这个集合,而我们通过代码插入的数据就在其中解决方案
如不明确指定集合名,mongoose会自动帮把 model() 中的第一个参数改为复数形式后作为集合名
提供两个解决方案,都是指定集合名
第一种:
给 mongoose.model() 传递第三个参数来指定集合名
第二种:
给 Schema 传递第二个配置项来指定集合名
我赌5毛。
mongoose
定义model时,会给表名自动加s,而你的login和list都没有加s调用不到数据库
这是我之前写的博客,最下面有提到
mongoose深海巨坑
你在res.send(data)加个console.log(data),看看可有结果
首先直接看控制台里xhr返回是否有值,如果有值就是你获取办法不对。
如果没有就是你压根没有把值发出去,说明问题出现在后端,再往回排查。