我正在学习如何在youtube教程的帮助下创建节点api,但每次运行nodemon并转到localhost时我都会收到此错误。我没有在我的代码的任何部分使用nay favicon.ico。有人能帮助我吗?
这是我的电影模型的完整代码
var mongoose = require('mongoose');
//movie schema
var moviesSchema = mongoose.Schema({
Title: {
type: String,
required: true
},
Genre: {
type: String,
required: true
},
Release: {
type: String,
required: true
},
Director: {
type: String,
required: true
},
Stars: {
type: String,
required: true
},
Summary: {
type: String,
required: true
}
});
//export the schema
var Movies = module.exports = mongoose.model('Movies',moviesSchema);
//get movies
module.exports.getMovies = function(callback, limit){
Movies.find(callback).limit(limit);
};
//get movies by id
module.exports.getMovieById = function(id, callback){
Movies.findById(id, callback);
};
//add a movie
module.exports.addMovie = function(movie, callback){
Movies.create(movie, callback);
};
//update a movie
module.exports.updateMovie = function(id, movie, options, callback){
var query = {_id:id};
var update = {
Title : movie.Title,
Genre : movie.Genre,
Release : movie.Release,
Director : movie.Director,
Stars : movie.Stars,
Summary : movie.Summary
};
Movies.findOneAndUpdate(query, update, options, callback);
};
//delete a movie
module.exports.deleteMovie = function(id, callback){
var query = {_id:id};
Movies.remove(query, callback);
};
这是我的index.js
var express = require('express');
var bodyParser = require("body-parser");
var mongoose = require('mongoose');
Movie = require('./models/movies');
var app = express();
app.use(bodyParser.json());
//mongoose connection
mongoose.connect('mongodb://localhost/movielist');
var db = mongoose.connection;
//get all movies json format
app.get('/',function(req,res){
Movie.getMovies(function(err,movies){
if(err){
throw err;
}
res.json(movies);
});
});
//get movie by id
app.get('/:_id',function(req,res){
Movie.getMovieById(req.params._id, function(err,movie){
if(err){
throw err;
}
res.json(movie);
});
});
//post new movies
app.post('/',function(req,res){
var movies = req.body;
Movie.addMovie(movies,function(err,movies){
if(err){
throw err;
}
res.json(movies);
});
});
//update new movies
app.put('/:_id',function(req,res){
var id = req.params._id;
var movies = req.body;
Movie.updateMovie(id, movies, {}, function(err,movies){
if(err){
throw err;
}
res.json(movies);
});
});
//delete an existing movie
app.delete('/:_id',function(req,res){
var id = req.params._id;
Movie.deleteMovie(id, function(err,movies){
if(err){
throw err;
}
res.json(movies);
});
});
app.listen(8000);
console.log("running on port 8000");
我在控制台日志中看到的错误可能来自此代码
//get movies by id
module.exports.getMovieById = function(id, callback){
Movies.findById(id, callback);
};
并在此代码的index.js中
Movie.getMovieById(req.params._id, function(err,movie){
但我不明白favicon.ico失败
答案 0 :(得分:1)
我刚刚和这个问题争吵了很长时间,并尝试了各种各样的修复(包括将我的Mongoose版本降级到4.7.2或更低版本,这是在其他地方建议的),但不幸的是,它们都没有为我工作。也就是说,虽然我无法解释为什么这种情况正在发生*,但有一个简单的解决方案对我有用:
不要向
〜/:var 发出请求。而是在其间添加一个额外的图层,以便您的请求转到〜/ string /:var 。
在您的问题中,您有" /:"的get,put和delete请求。改变这三行代码和任何依赖关系,你应该或多或少地去做。
*我最好猜测为什么会发生这种情况:某些事情未能识别" /"路径为空,而是匹配" /"和" /:X"同时进行。
答案 1 :(得分:0)
//get movie by id
app.get('/:_id',function(req,res){
Movie.getMovieById(req.params._id, function(err,movie){
if(err){
throw err;
}
res.json(movie);
});
获取请求无法使用params。
您应该将其更改为发布请求
答案 2 :(得分:0)
您需要在根目录(<link>
处的HTML或EJS文件头中的网站图标图标图像上添加'/'
标签,并与服务器通信。
添加以下通用标签即可解决该问题:
<link rel="icon" type="image/svg+xml" href="https://example.com/image.svg">
或者如果您将自己的收藏夹图标(任何图像文件,例如下面显示的image.png)放置在公用文件夹中,则可以使用此文件:
<link rel="icon" href="image.png">
问题解释:
默认情况下,每次请求新页面时,浏览器都会查找图标文件;某些浏览器在首次找到该文件后会对其进行缓存。 <link rel="icon" href="LOCATION">
将浏览器指向图标文件的位置,按照惯例,该文件称为Favicon.ico。如果href是一个外部URL,它将从该URL获取图标。如果href是路径(例如“ Favicon.ico”),则它将在您的公用文件夹中查找,如果公用文件夹中不存在,则将其称为/Favicon.ico
上的GET路由。这会触发您的代码将不需要的条目添加到数据库中。