2017-05-08 9 views
0

私はRESTfulなAPIを構築しようとしており、ロードブロッキングを打ちました。なぜ私が404応答を得ているのか分かりません。Node + Express APIからhttpを取得しようとする404を取得する

私は http GET localhost:3000/api/users/

を行うと、(サーバーのコンソールに)受信HTTPieを使用しています:

Request URL: /api/users/ Request Type: GET hello from get, calling next [{"_id":"58e8200bda045823ad9e147d","created_at":"2017-04-07T23:26:03.354Z","name":"Matt","email":"[email protected]","gamesPlayed":100,"wins":86,"__v":0},{"_id":"58e82112eb158223dabf54ce","created_at":"2017-04-07T23:30:26.373Z","name":"Leif","email":"[email protected]","gamesPlayed":100,"wins":92,"__v":0},{"_id":"58eb74456f2d1c10e907702b","created_at":"2017-04-10T12:02:13.026Z","name":"Leif","email":"[email protected]","gamesPlayed":100,"wins":92,"__v":0},{"_id":"58eb838d3b521817fa507b0e","created_at":"2017-04-10T13:07:25.668Z","name":"Leif","email":"[email protected]","gamesPlayed":100,"wins":92,"__v":0},{"_id":"58eb84370666cb185d78b5af","created_at":"2017-04-10T13:10:15.122Z","name":"Leif","email":"[email protected]","gamesPlayed":100,"wins":92,"__v":0},{"_id":"58eb84eeef35b5189b417187","created_at":"2017-04-10T13:13:18.376Z","name":"Leif","email":"[email protected]","gamesPlayed":100,"wins":92,"__v":0}] GET /api/users/ 404 41.989 ms - 149

データはミドルウェアにconsole.log'dされていること。それはHTTPieからres.json

と応答をログです:

HTTP/1.1 404 Not Found 
Connection: keep-alive 
Content-Length: 149 
Content-Security-Policy: default-src 'self' 
Content-Type: text/html; charset=utf-8 
Date: Mon, 08 May 2017 13:52:40 GMT 
X-Content-Type-Options: nosniff 
X-Powered-By: Express 

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="utf-8"> 
<title>Error</title> 
</head> 
<body> 
<pre>Cannot GET /api/users/</pre> 
</body> 
</html> 

Content-TypeはHTMLすべきではない、それはJSONでなければなりません。エクスプレスドキュメントによると、res.json()を使用することは、私がやっていると信じている正しい方法です。

簡潔にするために、ここにはすべてではなく一部のコードがあります。私はそれが必要であればすべて表示することができますが、私はこれらが重要なビットだと思います。 usersController.jsの

server.js

var api = require('./api/api') 
var app = express() 
app.use('/api', api) 

api.js

var router = require('express').Router() 
var users = require('./users/usersRoutes') 
router.use('/users', users) 
module.exports = router 

userRoutes.js

var router = require('express').Router() 
var logger = require('../../utils/logger') 
var controller = require('./usersController') 

// if id was passed, run params 
router.param('id', controller.params) 

// root 
router.route('/') 
    .get(controller.get, function(req,res,next) { 
    logger.log(res.json) 
    next() 
    }) 

get関数

get: function(req, res, next) { 
    var promise = User.find().exec() 
    promise.then(function(users){ 
     if (!users) { 
     next(new Error('Didn\'t find any users')) 
     } else { 
     logger.log('hello from get, calling next') 
     res.json = users // attach response 
     next() // call next, could be CRUD op 
     } 
    }) 
    .catch(function(err) { 
     next(err) // pass error up 
    }) 
    }, 

ご協力いただきありがとうございます。あなたのusersController.jsコントローラで

+1

'res.json'は関数です。あなたは 'res.json = users'ではなく' res.json(users) 'をやっていなければなりません。 –

答えて

1

logger.log('hello from get, calling next') 

// res.json = users <=== WRONG 
// res.json is a function 

res.json(users) 
next() 

res.jsonが関数であるが、ここではドキュメントを見て: https://expressjs.com/en/api.html#res.json

1

私はコードが2つのエラーがあると思います:

まず、あなたは」didnの応答を終了してください。そのため、あなたは '404'応答を得ます。

は、jsonDataのように別のフィールド名を使用してデータを保存することは避けてください。

関連する問題