javascript - 用nodejs傳遞資料庫的資料給前台,資料庫中有數據,連線也是成功的,可是為什麼取得都的是空數組?
ringa_lee
ringa_lee 2017-06-05 11:08:50
0
4
1193

1.api.js

#2.db.js


3.vue

#4.資料庫

#結果是:

#就是取得到的結果是空數組,可是這個連結和資料庫都是對的,這是為什麼? ? ?

ringa_lee
ringa_lee

ringa_lee

全部回覆(4)
滿天的星座

這個問題的癥結如 @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 這個集合,而我們透過程式碼插入的資料就在其中

解決方案

如不明確指定集合名,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深海巨坑

Peter_Zhu

你在res.send(data)加個console.log(data),看看可有結果

某草草

先直接看控制台裡xhr回傳是否有值,如果有值就是你取得辦法不對。

如果沒有就是你壓根沒有把數值發出去,表示問題出現在後端,再往回排查。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板