解决方案 #1
- 在模型
Rent 上调用 find 将返回一个 Promise。
- 我们需要
await 让 Promise 解决或在出现错误时被拒绝。
- 始终将
async\await 代码放在try-catch 块中。
const express = require('express')
const Rent = require('../model/rent')
route = express()
route.use(express.json());
route.get('/rent', async (req, res) => {
try {
const rents = await Rent.find().exec();
res.send(JSON.stringify(rents));
} catch (error) {
res.send({error: error.message});
}
})
module.exports = route;
解决方案 #2:如果您想要 JSON 格式的结果。这就是我的编码方式。
* node_modules
* app.js
* db.js
* src
- routes
- api_router.js
文件path\to\project\app.js:
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const db = require("./db");
var apiRouter = require('./src/routes/api_router');
var app = express();
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/api', apiRouter);
module.exports = app;
文件path\to\project\db.js:
const mongoose = require('mongoose');
const DB_URI = "mongodb://localhost:27017/backend_app";
const DB_OPTIONS = {
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
useCreateIndex: true
}
(async function () {
try {
await mongoose.connect(DB_URI, DB_OPTIONS);
console.log("MONGOOSE: Connected to the database!");
} catch (error) {
console.log("MONGOOSE ERROR");
console.log(error);
}
})();
文件path\to\project\src\routes\api_router.js:
const express = require('express');
const router = express.Router();
const Rent = require('../models/country_model')
router.get('/rent', async (req, res) => {
try {
const rents = await Rent.find().exec();
res.status(200).json({ data: rents }); // <- Check this line.
} catch (error) {
res.status(500).json({ error: error.message }); // <- Check this line.
}
})
module.exports = router;
为什么是find().exec()?
find().exec() on mongoose 函数将返回一个“真实”的 Promise 对象。 Read this.