NODE.JS遵循角度基本路线时的路由问题

时间:2016-09-12 18:51:51

标签: javascript angularjs node.js

尝试访问网址http://localhost:8000/data/event/1时 我收到错误说

  

无法GET / data / event / 1

我的网络服务器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);
};

1 个答案:

答案 0 :(得分:0)

您的问题是您定义路线的方式,他们需要领先/

// 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()

的回调
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);
    });
};