javascript - Utilisez Nodejs pour transférer les données de la base de données vers la réception. Il y a des données dans la base de données et la connexion est réussie, mais pourquoi obtenez-vous un tableau vide ?
ringa_lee
ringa_lee 2017-06-05 11:08:50
0
4
1189

1.api.js

2.db.js


3.vue

4. Base de données

Le résultat est :

Le résultat obtenu est un tableau vide, mais le lien et la base de données sont corrects. Pourquoi ? ? ?

ringa_lee
ringa_lee

ringa_lee

répondre à tous(4)
滿天的星座

Le nœud de ce problème, comme l'a dit @cheesekun, est que mangouste changera automatiquement le nom de la collection (premier paramètre) dans le modèle au pluriel.

Ici, je donne mon propre processus expérimental et propose deux solutions ci-dessous.

J'ai d'abord créé un projet simple basé sur le sens du sujet

app.js

const express = require('express');
const app = express();

app.use('/api',require('./router/api'));

app.listen(3000, () => {
    console.log('Server is running!');
});
app.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
}

module/db.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;

router/api.js

const list = new List({
    name: '代码创建的数据',
    age: 1
});
list.save(function (err, data) {
    console.log(data);
});

通过 可视化工具 连接到 mongodb 预先在 test 数据库 list 集合下插入了一条文档

发现问题

通过浏览器直接访问得到了 同题主一样的空数组

寻找原因

尝试插入一条文档到集合中

module/db.js 底部通过代码插入一条数据

const List = mongoose.model('list', listSchema,'list');

重新运行,并通过浏览器访问,返回了通过代码插入的数据

此时通过 可视化工具 可以发现 多出了 listsmodule/db.js

const listSchema = new Schema({
    name: String,
    age: Number
},{
    collection: 'list'
});

routeur/api.js rrreee Connectez-vous à mongodb via l'outil de visualisation et insérez à l'avance un document dans la collection de listes de bases de données de test

Problème trouvé

Accès directement via le navigateur et obtenu le même tableau vide que le sujet

Trouvez la raison

Essayez d'insérer un document dans la collection

Au bas de module/db.js

insérez une donnée

via le code

rrreee Réexécution et accès via le navigateur, les données insérées via le code sont renvoyées

🎜 🎜À ce stade, vous pouvez découvrir grâce à l'outil de visualisation qu'il existe une collection supplémentaire listes, et les données que nous avons insérées via le code s'y trouvent🎜 🎜🎜🎜🎜🎜 🎜Solution🎜 🎜🎜Si vous ne spécifiez pas explicitement le nom de la collection, mangouste changera automatiquement le premier paramètre de model() au pluriel comme nom de la collection🎜🎜 🎜Proposez deux solutions, toutes deux précisant le nom de la collection🎜 🎜Le premier type :🎜 🎜🎜Passez le troisième paramètre à mongoose.model() pour spécifier le nom de la collection🎜🎜 rrreee 🎜Le deuxième type : 🎜 🎜🎜Passez le deuxième élément de configuration à Schema pour spécifier le nom de la collection🎜🎜 rrreee
伊谢尔伦

Je parie 50 centimes.
mongooseLors de la définition du modèle, s sera automatiquement ajouté au nom de la table, mais votre login et votre liste n'ajoutent pas de s
Impossible d'appeler la base de données
Ceci est un blog que j'ai écrit avant, c'est mentionné en bas
mongoose deep sea pit

Peter_Zhu

Ajoutez console.log(data) à res.send(data) et voyez s'il y a un résultat

某草草

Tout d'abord, vérifiez directement s'il y a une valeur renvoyée par xhr dans la console. S'il y a une valeur, vous l'avez obtenue de manière erronée.

Sinon, cela signifie que vous n'avez pas envoyé la valeur du tout, ce qui signifie que le problème se produit dans le backend, et vous pouvez revenir en arrière et vérifier.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal