当前位置: 首页 > 知识库问答 >
问题:

node.jsTypeError:路径必须是绝对的或指定根res.send文件[未能解析JSON]

元阳荣
2023-03-14

[add]所以我的下一个问题是,当我尝试添加一个新的依赖项时(npm安装--save socket.io)。JSON文件也是有效的。我得到这个错误:解析json失败

npm ERR! Unexpected string
npm ERR! File: /Users/John/package.json
npm ERR! Failed to parse package.json data.
npm ERR! package.json must be actual JSON, not just JavaScript.
npm ERR! 
npm ERR! This is not a bug in npm.
npm ERR! Tell the package author to fix their package.json file. JSON.parse 

所以我一直在试图弄清楚为什么这个错误会返回。所有文件(超文本标记语言、JSON、JS)都在我桌面上的同一个文件夹中。我用node.js和socket.io

这是我的JS文件:

var app = require('express')();
var http = require('http').Server(app);

app.get('/', function(req, res){
  res.sendFile('index.html');
});

http.listen(3000,function(){
    console.log('listening on : 3000');
});

这就是返回的内容:

MacBook-Pro:~ John$ node /Users/John/Desktop/Chatapp/index.js 
listening on : 3000
TypeError: path must be absolute or specify root to res.sendFile
    at ServerResponse.sendFile (/Users/John/node_modules/express/lib/response.js:389:11)
    at /Users/John/Desktop/Chatapp/index.js:5:7
    at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5)
    at next (/Users/John/node_modules/express/lib/router/route.js:100:13)
    at Route.dispatch (/Users/John/node_modules/express/lib/router/route.js:81:3)
    at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5)
    at /Users/John/node_modules/express/lib/router/index.js:234:24
    at Function.proto.process_params (/Users/John/node_modules/express/lib/router/index.js:312:12)
    at /Users/John/node_modules/express/lib/router/index.js:228:12
    at Function.match_layer (/Users/John/node_modules/express/lib/router/index.js:295:3)
TypeError: path must be absolute or specify root to res.sendFile
    at ServerResponse.sendFile (/Users/John/node_modules/express/lib/response.js:389:11)
    at /Users/John/Desktop/Chatapp/index.js:5:7
    at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5)
    at next (/Users/John/node_modules/express/lib/router/route.js:100:13)
    at Route.dispatch (/Users/John/node_modules/express/lib/router/route.js:81:3)
    at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5)
    at /Users/John/node_modules/express/lib/router/index.js:234:24
    at Function.proto.process_params (/Users/John/node_modules/express/lib/router/index.js:312:12)
    at /Users/John/node_modules/express/lib/router/index.js:228:12
    at Function.match_layer (/Users/John/node_modules/express/lib/router/index.js:295:3)

共有3个答案

蓬英逸
2023-03-14

尝试添加根路径。

app.get('/', function(req, res) {
    res.sendFile('index.html', { root: __dirname });
});
太叔高义
2023-03-14

在里面mjs文件我们现在没有_udirname

因此

res.sendFile('index.html', { root: '.' })
松刚豪
2023-03-14

错误很明显,您需要在res.sendFile()的配置对象中指定绝对(而不是相对)路径和/或设置root。示例:

// assuming index.html is in the same directory as this script

res.sendFile(__dirname + '/index.html');

或者指定根目录(用作res.sendFile()的第一个参数的基本路径):

res.sendFile('index.html', { root: __dirname });

指定root路径在传递用户生成的文件路径时更有用,该路径可能包含格式错误/恶意的部分,如...(例如./.../.../.../.../.../etc/Passwd)。设置root路径可防止此类恶意路径被用于访问该基路径之外的文件

 类似资料:
  • 问题内容: [添加]所以我的下一个问题是,当我尝试添加新的依赖项时(npm install –save socket.io)。JSON文件也有效。我收到此错误:无法解析json 因此,我一直在尝试找出为什么此错误一直在返回。所有文件(HTML,JSON,JS)都在我桌面上的同一文件夹内。我正在使用node.js和socket.io 这是我的JS文件: 这是返回的内容: 问题答案: 错误非常明显,您

  • 问题内容: 我是GO的新手,在Windows中初始化GOPATH时遇到错误。在我的项目文件夹中是 C:\ Users \ kamin \ Documents \ pm-manager 我试图在环境变量(GOPATH)中设置路径,但是却出错了:GOPATH条目是相对的;必须为绝对路径:“:/ cygdrive / c / Users / kamin / Documents / pm-manager

  • 问题内容: 我一直在尝试获取本地文件的正确路径。我有以下目录: 我在执行从与JS代码: 但这是行不通的,甚至警报也没有开始。怎么了? 我也尝试过这个: 在这种情况下,警报未定义。 问题答案: 由于它位于目录中,因此您需要执行以下操作: 文件路径是 纯JS:

  • 我也试着做 而我不断得到这个结果。

  • 问题内容: 节点中是否有类似“ path.resolve”的API?还是有什么可以做的? 例如(nodejs代码): 应该得到: 问题答案: 解决(表示用户的家)是另一回事,通常是由外壳来解决。。 如果要通过Go代码执行此操作,则可以使用该函数获取有关当前用户的详细信息,包括其主文件夹(即)。但是,您仍然必须自己替换它。 原始答案如下。 您可以使用或。 例如: 输出: 您可以使用和从路径中“删除”

  • 本文向大家介绍获取Java中目录或文件的绝对路径,包括了获取Java中目录或文件的绝对路径的使用技巧和注意事项,需要的朋友参考一下 方法java.io.File.getAbsolutePath()用于获取字符串形式的文件或目录的绝对路径名。此方法不需要任何参数。 演示此的程序如下所示- 示例 上面程序的输出如下- 输出结果 现在让我们了解上面的程序。 使用方法java.io.File.getAbs