我正在尝试使用模型和架构从mongo数据库中获取所有记录。我能够连接到数据库。而且当我运行查询时,我没有任何响应。
routes.js
import express from 'express';
var router = express.Router();
import mongoose from 'mongoose';
const db = 'mongodb://localhost:27017/dbname';
import {contacts} from '../models/model.js';
// exports this js file
export { router }
//connect to mongodb
mongoose.createConnection(db, { useNewUrlParser: true , useUnifiedTopology: true }, (err, res) => {
if(err) {
console.error("Error: "+ err);
}
else {
console.log('connected to mongodb');
}
})
router.get('/check', (req, res)=> {
res.send('in roues');
});
// mongo数据库调用
router.get('/contacts', (req, res) => {
console.log('getting contacts');
let promise = contacts.find({}).exec();
console.log(promise);
promise.then(function(err, contacts) {
console.log('in func');
if(contacts) {
console.log('data received');
console.log(contacts);
res.send('data received');
}
else {
console.log('doc not found');
}
})
})
model.js
import mongoose from 'mongoose';
const schema = mongoose.Schema;
const contactSchema = new schema({
name: String,
details: [
{
text: String,
icon: String
}
]
});
let contacts = mongoose.model('contacts', contactSchema);
export {contacts}
控制台输出: (节点:27440)实验警告:ESM模块加载程序是实验性的。 服务器启动 连接到mongodb 取得联系 承诺{}
答案 0 :(得分:2)
这可能是导致未捕获错误的原因。使用然后捕获或尝试异步捕获。
warning: comparison between pointer and integer
39 | if (newline == NULL)
我使用过es6箭头功能。 您还可以通过异步等待来尝试捕获
router.get('/contacts', (req, res) => {
console.log('getting contacts');
contacts.find({})
.then(contacts=> {
console.log(contacts)
})
.catch(error=>{
console.log(error.mmessage)
}
答案 1 :(得分:0)
您必须使用catch函数处理错误情况,请参见此链接
答案 2 :(得分:0)
.then(...)仅采用一个参数,即已解析的响应。
所以代替 promise.then(function(err,contact){...});采用 promise.then(function(contacts {...});