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