我是Node的新手。我尝试用node开发一个简单的电影api应用程序。js和我用express generator创建了应用程序。我遇到了这个错误,我无法处理它。
首先,我在google上找到了我检查过的github和stackoverflow,但我无法解决我的问题。
首先,此处显示错误消息:
TypeError[ERR_INVALID_ARG_TYPE]:"path"参数必须是string类型。在validateString(内部/trim_prefix: 11)在extname(node_modules: 5)在新视图(/用户/tugrul/项目/学习项目/电影api/node_modules/Express/lib/node_modules: 14)在F_params(/用户/tugrul/项目/学习项目/电影api/node_modules/Express/lib/application.js:570: 12)在ServerResponse.render(/用户/tugrul/项目/学习项目/电影api/node_modules/Express/lib/response.js:1008: 7)在 /Users/tugrul/Projects/Learning项目/电影api/app.js:45: 7在Layer.handle_error(/用户/tugrul/项目/学习项目/电影api/node_modules/Express/lib/路由器/layer.js:71: 5)在validators.js:112(/用户/tugrul/项目/学习项目/电影api/path.js:1231/Express/lib/路由器/index.js:315: 13)在Function.processunction.render(/用户/tugrul/项目/view.js:56/Express/lib/路由器/index.js:284: 7/Learning项目/电影api/node_modules/Express/lib/路由器/index.js:335: 12)在下一个(/用户/tugrul/项目/学习项目/电影api/node_modules/Express/lib/路由器/index.js:275: 10)在 /Users/tugrul/Projects/Learning项目/电影api/app.js:34: 3在Layer.handle[作为handle_request](/用户/tugrul/项目/学习项目/电影api/node_modules/Express/lib/路由器/layer.js:95: 5)在trim_prefix(/用户/tugrul/项目/学习项目/电影api/node_modules/Express/lib/路由器/index.js:317: 13)在 /Users/tugrul/Projects/Learning项目/电影api/node_modules/Express/lib/路由器/index.js:284: 7在Function.process_params(/用户/tugrul/项目/学习项目/电影api/node_modules/Express/lib/路由器/index.js:335: 12)
这是我的package.json文件:
{
"name": "movie-api",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "nodemon ./bin/www"
},
"dependencies": {
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"express": "~4.16.1",
"http-errors": "~1.6.3",
"jade": "~1.11.0",
"mongoose": "^5.9.10",
"morgan": "~1.9.1"
}
}
这是我的应用程序。js文件:
const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const indexRouter = require('./routes/index');
const movieRouter = require('./routes/movie');
const directorRouter = require('./routes/director');
const app = express();
//mongodb connection
const db = require('./helper/db')();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/api/movies', movieRouter);
app.use('api/directors', directorRouter);
// catch 404 and forward to error handler
app.use((req, res, next) => {
next(createError(404));
});
// error handler
app.use((err, req, res, next) => {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render({error:{message:err.message, code: err.code}});
});
module.exports = app;
这是我的director路由器文件:
const express = require('express');
const router = express.Router();
//Models
const Director = require('../models/Director');
// Get All Movies
router.get('/', (req, res, next) =>{
res.json({message: 'Director APIs'});
});
module.exports = router;
这是我的电影路由器文件:
const express = require('express');
const router = express.Router();
//Models
const Movie = require('../models/Movie');
// Get All Movies
router.get('/', (req, res) =>{
const promise = Movie.find({ });
promise.then((data)=>{
res.json(data);
}).catch((err)=>{
res.json(err)
});
});
//Top 10 List
router.get('/top10', (req, res) =>{
const promise = Movie.find({ }).limit(10).sort({ imdb_score: -1});
promise.then((data)=>{
res.json(data);
}).catch((err)=>{
res.json(err)
});
});
//Add new movie
router.post('/add-movie',(req,res,next)=>{
//const {title,imdb_score,category,country,year} = req.body;
const movie = new Movie(req.body);
const promise = movie.save();
promise.then((data)=>{
res.json(data);
}).catch((err)=>{
res.json(err);
});
});
// Get Movie From ID
router.get('/:movie_id',(req,res,next)=>{
const promise = Movie.findById((req.params.movie_id));
promise.then((movie)=>{
if(!movie){
console.log(movie);
next({message : 'This movie can not found!', code:404});
}else{
res.json(movie);
}
}).catch((err)=>{
res.json(err);
});
});
//Update Movie
router.put('/:movie_id',(req,res,next)=>{
const promise = Movie.findByIdAndUpdate(
req.params.movie_id,
req.body,
{
new: true
});
promise.then((movie)=>{
if(!movie){
console.log(movie);
next({message : 'This movie can not found!', code:404});
}else{
res.json(movie);
}
}).catch((err)=>{
res.json(err);
});
});
//Delete movie
router.delete('/:movie_id',(req,res,next)=>{
const promise = Movie.findByIdAndRemove(
req.params.movie_id,
req.body);
promise.then((movie)=>{
if(!movie){
console.log(movie);
next({message : 'This movie can not found!', code:404});
}else{
res.json({status: 1});
}
}).catch((err)=>{
res.json(err);
});
});
// get movies between two years
router.get('/between/:start_year/:end_year',(req,res,next)=>{
const {start_year,end_year} = req.params;
const promise = Movie.find(
{
// gte = ">=", lte = "<="
year: { "$gte": parseInt(start_year), "$lte": parseInt(end_year)}
}
);
promise.then((movie)=>{
if(!movie){
console.log(movie);
next({message : 'This movie can not found!', code:404});
}else{
res.json(movie);
}
}).catch((err)=>{
res.json(err);
});
});
module.exports = router;
当我尝试访问时http://localhost:3000/api/directors我得到这个错误。为什么?我该怎么办?
你能帮帮我吗?
问题如下:
res.render({error:{message:err.message, code: err.code}});
根据文档,render期望第一个参数是要呈现的html页面的路径。假设视图目录中有一个名为error的文件,将其更改为
res.render('error', {error:{message:err.message, code: err.code}});
应该可以解决问题。
关于评论中的第二个问题:
这里的问题是您的中间件:
// catch 404 and forward to error handler
app.use((req, res, next) => {
next(createError(404));
});
基本上,每个请求都会导致错误,因为您设置了一个普通的中间件,该中间件也将在成功请求时执行。因此,您可能只需删除此中间件,因为您已经设置了错误处理程序。
嗨,我试图上传一个基地64文件从NodeJs到Firebase存储(谷歌云存储)使用下面给出的代码。但是我得到一个错误说明 在此错误TypeError[ERR_INVALID_ARG_TYPE]:路径参数必须是字符串类型。在validateString接收类型对象(内部/validators.js:125: 11) 代码是: 有人能给我建议一条出路吗?我不明白这个问题。谢谢
electron应用程序代码来自《跨平台桌面应用程序》一书,它旨在向浏览器显示用户文件目录,就像在桌面资源管理器应用程序中一样。 打印到开发人员工具控制台时出现的错误为“Uncaught(in promise)TypeError[ERR_INVALID_ARG_TYPE]:“path”参数必须是string类型。未定义接收。我做错了什么?
我正在用python制作一个潜艇游戏,但当我试图运行它时,解释器给了我一个非常奇怪的错误:“TypeError:参数1必须是pygame.Surface,而不是type。”我试图在网上搜索我的答案,但这似乎不是很常见的错误。我也试着自己去发现错误,但我觉得一切都很好。下面是我认为错误所在的部分代码:
问题内容: 我正在React的一个项目上工作,遇到了一个让我感到困惑的问题。 每当我运行时,都会出现此错误: TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须为字符串类型。接收类型未定义 我不知道为什么会这样,如果有人经历过,我将不胜感激。 问题答案: 要解决此问题,只需升级 react-scripts 软件包(使用来检查最新版本): 将您的 package.js
我试图创建一种方法,客户端可以上传图像从前端到后端服务器,然后将图像存储到Cloud dinary,但我最终得到了这个错误: TypeError[ERR_INVALID_ARG_TYPE]:路径参数必须是字符串类型或Buffer或URL的实例。收到未定义 这是我的后端代码库: 这是我从控制台得到的 我如何解决这个问题?
在以下代码中,我得到了此错误: TypeError[ERR_INVALID_ARG_TYPE]:原始参数的类型必须是Function。接收类型未定义 它说问题在第31行: 我在使用promisify图书馆时遇到问题。