Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js:使用express加载JSON文件时发生路径错误_Javascript_Json_Node.js_Express_Filepath - Fatal编程技术网

Javascript Node.js:使用express加载JSON文件时发生路径错误

Javascript Node.js:使用express加载JSON文件时发生路径错误,javascript,json,node.js,express,filepath,Javascript,Json,Node.js,Express,Filepath,我有一组文件夹和文件是这样制作的: viz |_ app.js // node application |_ public |_ css |_ bubblemap.css |_ images |_ nuts |_ nuts0.json |_ script |_ bubblemap.js |_ views |_ bubble

我有一组文件夹和文件是这样制作的:

viz
|_ app.js // node application
|_ public
        |_ css
                |_ bubblemap.css
        |_ images
        |_ nuts
                |_ nuts0.json
        |_ script
                |_ bubblemap.js
|_ views
        |_ bubblemap.hbs
bubblemap.hbs:

这是节点应用程序文件

viz/app.js:

我得到这个错误:

加载文件时出错! 错误:找不到404

也就是说,未正确拾取nuts0和nuts2文件。 我认为这是一个路径问题,但对我来说似乎是对的


我尝试:../nuts/nuts0.json,../nuts/nuts0.json,nuts/nuts0.json,但没有任何效果。

这里的问题是,由于webapp没有提供资源,可能无法加载资源。。。 这可以通过尝试访问json文件的url来证明

然后,这取决于您希望如何为JSON提供服务: 文件系统 ·服务静态:/public/file.json 在本例中,您将文件放在一个公共可访问文件夹中,它们将作为文件系统中的静态内容

app.use(express.static('public'))
创建一个名为public的文件夹并将json存储在其中,它们将可以在webapp的根localhost:3000/nuts0.json下访问

·发送文件:/private/File.json 在本例中,文件系统中仍然有一个JSON作为文件,但不像上面的示例那样位于可访问web的公用文件夹中。 相反,在这里,您将其作为路由器路径GET请求中的一个资源,如果请求具有所需的cookie、参数等,您甚至可以应用预服务检查

app.get("/jsonFiles/nut0.json",(req,res)=>{
 res.sendFile(__dirname+"/private/nuts0.json")
})
根据GET请求动态生成 在本例中,文件系统中没有文件,但根据来自数据库、内存等的请求实时构建文件。。。 您还可以对此应用服务前检查用户是否具有所需的权限、cookie、请求参数等

global.example_counter = 0; //in memory (global) variable
app.get("/jsonFiles/a-virtual-path-for-the-json",(req,res)=>{
 example_request_counter++
 res.json({"total requests":example_request_counter})
})
jsonFiles不需要存在,这是webapp路由器的最终路径,服务的是res.send/res.json中的内容


就我个人而言,主要是为了生产,我会使用NGINX作为node.js应用程序的反向代理,并使用它提供静态内容。

您是否在根/上下文路径中部署应用程序?或者使用不同的上下文/应用程序?这可以解释。@user2037710谢谢你的帮助。viz/app.js是一个启动服务器的文件,我需要它来进行可视化。要启动应用程序,请使用/viz文件夹中的node app.js。我在主消息中添加了viz/app.js代码。
app.use(express.static('public'))
app.get("/jsonFiles/nut0.json",(req,res)=>{
 res.sendFile(__dirname+"/private/nuts0.json")
})
global.example_counter = 0; //in memory (global) variable
app.get("/jsonFiles/a-virtual-path-for-the-json",(req,res)=>{
 example_request_counter++
 res.json({"total requests":example_request_counter})
})
global.inMemoryDB = { //in memory (global) variable
 "nuts0":{"data":"the universe is in fact a multiverse"},
 "nuts1":{"data":"tesla was bright"},
 "nuts2":{"data":"sugar kills..."},
}; 
//router path
app.get("/jsonFiles/:j",(req,res)=>{
 if(inMemoryDB[req.params.j]){res.json(inMemoryDB[req.params.j])}
 else{res.json({"error":"non-existing virtual file requested"}
)}
// http://localhost:3000/jsonFiles/nuts0 will serve you the inMemory json