我正在尝试创建一个使用节点,ember和mongodb的网页应用程序,这是能够编辑或删除我的数据库中现有的歌曲,网页已经能够显示歌曲和添加新的。当我点击一首歌曲旁边的“编辑”链接时,问题就出现了--它抛出“未捕获的TypeError:无法读取空的属性' id‘”,而它应该通过它的id为我获取一首歌曲。
下面是我的app/routes.js代码:
...
router.route('/songs/:song_id')
.put(function(req, res) { songs.updateSong(req, res, req.params.song_id) })
.delete(function(req, res) { songs.deleteSong(req, res, req.params.song_id) });
...
下面是我的api/song.js代码:
...
module.exports.findById = function(req, res) {
console.log(req.params.id);
Song.findById(req.params.id ,function(err, data){
if(err){console.log(err);}
console.log(data);
return res.send({
song: data
});
});
};
...
下面是我的app/router.js代码:
...
var SongSchema = new mongoose.Schema({
title: String,
artist: String,
year: Number,
genre: String,
lyrics: String
});
...
app.get('/api/songs/:id', function(req, res){
console.log(req.params.id);
Song.findById(req,res ,function(err, docs){
if(err) res.send({error:err});
else res.send({data:docs, "Song":"song"});
});
});
...
模板/song.hbs
...
{{#each model as |song|}}
<li>
<b>{{song.artist}} - {{song.title}} {{#link-to 'edit' song.id}}EDIT{{/link-to}} </b><br>
ID:<i>{{song._id}}</i> <br>
Released: {{song.year}} <br>
Genre: {{song.genre}} <br>
Lyrics:<br> "{{song.lyrics}}"<br><br>
</li>
{{/each}}
...
下面是我的控制器/edit.js
...
export default Ember.Controller.extend({
actions: {
save: function() {
var d = this.get('model');
d.save();
this.transitionToRoute('song');
},
del: function() {
this.get('model').deleteRecord();
this.transitionToRoute('song');
this.get('model').save();
}
}
});
...
发布于 2019-03-25 02:22:51
从你那里得到GitHub链接后,我发现你在代码中有错误,导致未知的行为。
只需将app/routes.js
替换为以下内容:
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const SongsController = require('../api/songs');
const SongSchema = new mongoose.Schema({
title: String,
artist: String,
year: Number,
genre: String,
lyrics: String
});
const Song = mongoose.model('song', SongSchema);
module.exports = (app) => {
app.get('/api/songs', async (req, res) => {
try {
const songs = await Song.find({}).lean();
res.status(200).send({songs});
} catch(error) {
res.status(500).send({
message: error.message
});
}
});
app.get('/api/songs/:id', async (req, res) => {
try {
const song = await Song.findById(req.params.id).lean();
if(!song) {
return res.status(404).send({
message: "Song not found",
params: req.params
});
}
res.status(200).send({song});
} catch(error) {
res.status(500).send({
message: error.message
});
}
});
app.use(bodyParser.urlencoded({extended: false}));
app.post('*', SongsController.addSong);
};
附注:快速修复只是将处理传递给已经编写的SongsController.findById
方法:
app.get('/api/songs/:id', SongsController.findById);
https://stackoverflow.com/questions/55326671
复制相似问题