遵循此模式cap.model.js:
const mongoose = require('mongoose');
const findOrCreate = require ('mongoose-findorcreate')
const Schema = mongoose.Schema;
let CapSchema = new Schema ({
title: {type: String},
list: {type: Array}
});
CapSchema.plugin(findOrCreate);
module.exports = mongoose.model('Cap', CapSchema);
我想从具有以下数据的get('/ url /:param1')中检索数据:
查找列表中包含param1的文档,并以数组形式返回其标题。
找到标题为param1的文档,并返回其列表。或者,如果不存在,请创建文档。在这两种情况下,还都返回其标题。
然后我要console.log: 一侧是标题(2),另一侧是由标题(1)和列表(2)组成的数组。
我的问题是我找不到或不了解findOrCreate(https://www.npmjs.com/package/mongoose-findorcreate)方法以及必须使用的参数。
目前我的代码如下:
在route.js中:
const express = require('express');
const router = express.Router();
const cap_controller = require('../controllers/cap.controller');
router.get('/:param1', cap_controller.cap_get);
module.exports = router;
在cap.controller.js中:
const Cap = require('../models/cap.model');
const foc = Cap.findOrCreate({},
function(err, cap) {
console.log(req.params.word + ' has been created !', word.main);
},
'title list');
exports.cap_get = function (req, cb) {
let capTitle = req.params.param1;
cb(capTitle);
};
而且我不了解方法何时需要参数以及回调函数需要什么样的参数。
答案 0 :(得分:0)
cap.controller.js 中有很多错误。首先,为什么foc
方法不在cap_get
方法之外?其次,您从不调用foc
方法,为什么?
在您的情况下,您要检查是否存在具有{params给定的标题的Cap
,如果不是这种情况,请创建并添加它。
您可以这样简单地实现:
exports.cap_get = function (req, res, next) {
let capTitle = req.params.param1;
Cap.findOrCreate({ title: capTitle }, function(err, cap) {
if (err) return next(err);
console.log(capTitle + ' has been created !');
res.status(200).json({ title: capTitle });
});
};
cap_get
只是具有其(req, res, next)
签名的快速回调,而findOrCreate
的第一个参数是主键,因此如果此键不存在大写字母(标题)它将创建它,否则它将返回文档。
您必须确保上限的标题唯一,以避免潜在的问题:
let CapSchema = new Schema ({
title: {type: String, unique: true},
list: {type: Array}
});