javascript - 用nodejs傳數(shù)據(jù)庫的數(shù)據(jù)給前臺,數(shù)據(jù)庫中有數(shù)據(jù),連接也是成功的,可是為什么獲取都的是空數(shù)組?
問題描述
1.api.js
2.db.js
3.vue
4.數(shù)據(jù)庫
結(jié)果是:
就是獲取到的結(jié)果是空數(shù)組,可是這個鏈接和數(shù)據(jù)庫都是對的,這是為什么???
問題解答
回答1:這個問題的癥結(jié)如 @cheesekun 所說,是因為:mongoose會自動幫把 model 中的集合名(第一個參數(shù))改為復數(shù)形式了。
這里我給出了自己的試驗過程,并在下面提供了兩種解決方案。
根據(jù)題主的意思首先創(chuàng)建了一個簡單的項目
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 數(shù)據(jù)庫 list 集合下插入了一條文檔
通過瀏覽器直接訪問得到了 同題主一樣的空數(shù)組
嘗試插入一條文檔到集合中
在 module/db.js 底部通過代碼插入一條數(shù)據(jù)
const list = new List({ name: ’代碼創(chuàng)建的數(shù)據(jù)’, age: 1});list.save(function (err, data) { console.log(data);});
重新運行,并通過瀏覽器訪問,返回了通過代碼插入的數(shù)據(jù)
此時通過 可視化工具 可以發(fā)現(xiàn) 多出了 lists 這個集合,而我們通過代碼插入的數(shù)據(jù)就在其中
如不明確指定集合名,mongoose會自動幫把 model() 中的第一個參數(shù)改為復數(shù)形式后作為集合名
提供兩個解決方案,都是指定集合名
第一種:
給 mongoose.model() 傳遞第三個參數(shù)來指定集合名
const List = mongoose.model(’list’, listSchema,’list’);
第二種:
給 Schema 傳遞第二個配置項來指定集合名
const listSchema = new Schema({ name: String, age: Number},{ collection: ’list’});回答2:
我賭5毛。mongoose定義model時,會給表名自動加s,而你的login和list都沒有加s調(diào)用不到數(shù)據(jù)庫這是我之前寫的博客,最下面有提到mongoose深海巨坑
回答3:你在res.send(data)加個console.log(data),看看可有結(jié)果
回答4:首先直接看控制臺里xhr返回是否有值,如果有值就是你獲取辦法不對。
如果沒有就是你壓根沒有把值發(fā)出去,說明問題出現(xiàn)在后端,再往回排查。
