내 ReactJS 프로젝트에서 현재 NodeJS 및 ExpressJS로 서버를 실행 중이고 MongoClient를 사용하여 MongoDB에 연결 중입니다. 사용자의 사용자 이름과 암호로 요청을 받아들이도록 설정 한 로그인 API 끝점을 설정했습니다. 사용자를 찾을 수 없으면 오류를 catch하고 프런트 엔드에 오류 (status(500)
)로 응답해야합니다.ReactJS + MongoDB + NodeJS/ExpressJS : process.nextTick (function() {throw err;});은 무엇입니까?
그러나 json 오류로 프런트 엔드에 응답하는 대신 서버가 손상됩니다. 나는 이유를 알아 내기 위해 모든 것을 시도했지만 여전히 운이 없다.
어떻게하면 다음 오류를 해결할 수 있습니까? 어떤 지침이나 통찰력이라도 대단히 감사 드리며 대답을 upvote 및 동의합니다.
데이터베이스에 존재하지 않는 사용자 이름과 암호 ({ username: 'iopsert', password: 'vser'}
)를 사용하여 의도적으로 요청했습니다. 여기
//login endpoint
app.post('/api/login/', function(req, res) {
console.log('Req body in login ', req.body)
console.log('THIS IS WHAT WAS PASSED IN+++++', req._id)
db.collection('users').findOne({username: req.body.username}, function(err, user) {
console.log('User found ')
if(err) {
console.log('THIS IS ERROR RESPONSE')
// Would like to send this json as an error response to the front-end
res.status(500).send({
error: 'This is error response',
success: false,
})
}
if(user.password === req.body.password) {
console.log('Username and password are correct')
res.status(500).send({
username: req.body.username,
success: true,
user: user,
})
} else {
res.status(500).send({
error: 'Credentials are wrong',
success: false,
})
}
})
그리고 여기에 터미널 오류 로그입니다 :
var handleCallback = function(callback, err, value1, value2) {
try {
if(callback == null) return;
if(value2) return callback(err, value1, value2);
return callback(err, value1);
} catch(err) {
process.nextTick(function() { throw err; });
return false;
}
return true;
}
편집 :
Req body in login { username: 'iopsert', password: 'vset' }
THIS IS WHAT WAS PASSED IN+++++ undefined
User found
/Users/John/practice-project/node_modules/mongodb/lib/utils.js:98
process.nextTick(function() { throw err; });
^
TypeError: Cannot read property 'password' of null
at /Users/John/practice-project/server/server.js:58:12
at handleCallback (/Users/John/practice-project/node_modules/mongodb/lib/utils.js:96:12)
at /Users/John/practice-project/node_modules/mongodb/lib/collection.js:1395:5
at handleCallback (/Users/John/practice-project/node_modules/mongodb/lib/utils.js:96:12)
at /Users/John/practice-project/node_modules/mongodb/lib/cursor.js:675:5
at handleCallback (/Users/John/practice-project/node_modules/mongodb-core/lib/cursor.js:165:5)
at setCursorNotified (/Users/John/practice-project/node_modules/mongodb-core/lib/cursor.js:505:3)
at /Users/John/practice-project/node_modules/mongodb-core/lib/cursor.js:578:16
at queryCallback (/Users/John/practice-project/node_modules/mongodb-core/lib/cursor.js:226:18)
at /Users/John/practice-project/node_modules/mongodb-core/lib/connection/pool.js:430:18
그리고 /Users/John/practice-project/node_modules/mongodb/lib/utils.js:98
은 다음을 참조한다
서버로 가져 오는 모든 일들은 다음과 같습니다
"use strict"
var express = require('express');
var path = require('path');
var config = require('../webpack.config.js');
var webpack = require('webpack');
var webpackDevMiddleware = require('webpack-dev-middleware');
var webpackHotMiddleware = require('webpack-hot-middleware');
var bodyParser = require('body-parser');
var MongoClient = require('mongodb').MongoClient;
var ObjectId = require('mongodb').ObjectID;
const jwt = require('jsonwebtoken')
var app = express();
var db;
var compiler = webpack(config);
app.use(webpackDevMiddleware(compiler, {noInfo: true, publicPath: config.output.publicPath}));
app.use(webpackHotMiddleware(compiler));
app.use(express.static('dist'));
app.use(bodyParser.json());
그리고 이것은 요청이 오류가 잡힌 방법 : 그것은 오류처럼 나에게 보이는
loginUser(creds) {
var request = {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(creds),
}
fetch(`http://localhost:3000/api/login`, request)
.then(res => res.json())
.then(user => {
console.log(user);
console.log('Successful')
})
.catch(err => {
console.log('Error is', err)
})
},
'user' 또는'req.body'가 정의되지 않은 것처럼 보입니다. 프로젝트에 ** bodyParser **를 포함 시켰습니까? – adeneo
@adeneo 예, 원래 게시물의 수정 사항을 살펴보십시오. 존재하는 사용자 이름과 암호로 요청을 전달할 때, 올바른'user'와'req.body'가 기록되고 if 문을 입력하십시오. –