Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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在遵循angular基础课程时的路由问题_Javascript_Angularjs_Node.js - Fatal编程技术网

Javascript NODE.JS在遵循angular基础课程时的路由问题

Javascript NODE.JS在遵循angular基础课程时的路由问题,javascript,angularjs,node.js,Javascript,Angularjs,Node.js,尝试访问URL时 我听到一个错误,说 无法获取/data/event/1 下面是我的web服务器js代码,下面是我提供的目录结构。看起来是个路由问题,但我不知道出了什么问题 我希望使用node提供JSON文件 var express = require('express'); var path = require('path'); var events = require('./eventsController'); var app = express(); var rootPath = pat

尝试访问URL时 我听到一个错误,说

无法获取/data/event/1

下面是我的web服务器js代码,下面是我提供的目录结构。看起来是个路由问题,但我不知道出了什么问题

我希望使用node提供JSON文件

var express = require('express');
var path = require('path');
var events = require('./eventsController');
var app = express();
var rootPath = path.normalize(__dirname + '/../');
console.log(__dirname);
var bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(express.static( rootPath + '/app'));


app.get('data/event/:id',events.get);
app.post('data/event/:id',events.save);

app.listen(8000);
console.log('Listening on port ' + 8000 + '...')
目录结构

DemoApp
 app
  css
  data
    event
      1.json
      2.json
 scripts
    node_modules
    eventsController
    web-server
EventController示例获取代码

var fs = require('fs');

module.exports.get = function(req, res) {
    var event = fs.readFileSync('app/data/event/' + req.params.id + '.json', 'utf8');
    res.setHeader('Content-Type', 'application/json');
    res.send(event);
};

您的问题在于您定义路线的方式,它们需要一个前导的
/

// Incorrect
app.get('data/event/:id',events.get);
app.post('data/event/:id',events.save);

// Correct
app.get('/data/event/:id',events.get);
app.post('/data/event/:id',events.save);
关于您如何读取文件的另一条评论。我不会在您的路由中使用
fs.readFileSync()
。这将阻止整个服务器处理请求/响应,直到文件读取完成。相反,我将使用异步版本,然后从
fs.readFile()
的回调响应


总的来说,这看起来不错。您在节点控制台中看到任何错误吗?想知道为什么有人投了反对票?解释为什么会被感激的评论。@Abhi9很高兴它有帮助,如果这是答案,请将它标记为答案,以便人们将来知道这解决了问题。是的,我做到了。只是出于好奇。有没有一种情况是,如果不使用斜杠,它会起作用。只是想理解一下。@Abhi9不是100%确定tbh,如果您使用的是
app.mountpath(“/”)
,我的猜测是肯定的,但是express中的所有内容都必须与应用程序根相关。Express使用如果您有兴趣了解更多有关Express如何进行路由模式匹配的信息,您可以浏览文档并试用该软件包。
module.exports.get = (req, res) => {
    fs.readFile('app/data/event/' + req.params.id + '.json', 'utf8', (err, json) => {
      // If an error occurred reading the file
      // send back a 500 INTERNAL SERVER ERROR
      if (err) return res.sendStatus(500);

      // Return a JSON response
      // automatically sets Content-Type to application/json
      return res.json(json);
    });
};