【发布时间】:2020-01-11 23:24:37
【问题描述】:
在过去的几个月里,我一直在 Node.js/Express 中制作 REST Api。我的 controller.js 文件中的异步函数遇到了这个问题。我的回调函数从客户端接收我的request,但是当我想发送response 时,我不断收到TypeError: res.sendStatus is not a function 错误。
这是我的代码:
index.js
const express = require('express');
const { parseData } = require("../controllers/parse.controller");
const { checkFirebaseLogin } = require("../controllers/checkFirebaseLogin.controller");
var bodyParser = require('body-parser');
var router = express.Router();
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: false }));
router.post('/api/idToken', checkFirebaseLogin);
router.post('/', parseData);
module.exports = router
这是我的 Controller.js 文件
checkFirebaseLogin.controller.js
const { checkUserLogin } = require("../services/checkUserLogin.service");
const checkFirebaseLogin = async (req, res) => {
console.log("Checking on user token ...");
const userToken = req.headers;
try {
var userUID = await checkUserLogin(userToken);
console.log("Here's the repsonse:");
console.log(userUID)
res.sendStatus(201)
} catch (error) {
console.log("I'm here right before the error message on checking the user token")
//console.log(error.message);
console.log(error)
}
};
module.exports = {
checkFirebaseLogin
};
我能够获得req.headers,但是当我尝试将响应(通过res.sendStatus(200))发送回客户端时,我总是收到错误消息。我哪里出错了?
更新时间:1 月 12 日
另外,这里是我的 app.js,这样你就可以看到我是如何处理我的路线的。客户端(基于我的代码将来自app.js -> routes/index.js -> controllers/checkFirebaseLogin.controller.js)
app.js
var express = require('express');
var http = require("http");
var app = express();
const routes = require('./routers');
//app.get('/', (req, res) => res.send('App is working'));
app.use('/', routes);
app.use('/api/idToken', routes);
http.createServer(routes).listen(5000, () => {
console.log("server up");
});
module.exports = {
app
};
【问题讨论】:
-
你确定它会扔进那个代码吗?显示完整的堆栈跟踪。因为可以抛出错误的唯一方法是
res不是 Express Response 对象。 -
通常,当您不小心将一些其他局部变量(通常是回调参数)定义为
res并且它覆盖了传递给请求处理程序的res时,就会发生此错误。然后,当您尝试调用res.sendStatus()时,这是错误的res对象。您没有在此处显示,但看起来此代码不会导致该错误,因此我怀疑您未向我们显示的其他一些代码会导致此错误。 -
注意:单独的问题,但您还需要在
catch处理程序中发送一些状态/响应。 -
@jfriend00 您还需要查看哪些其他代码?我的 app.js?
-
我建议您在
res.sendStatus(201);之前添加一个console.log("Before", typeof res.sendStatus, res);,在res.sendStatus(201)之后添加一个console.log("After");。这里三球。首先,查看res.sendStatus是否是一个函数,查看res是否是您期望的对象,然后查看第二个对象是否确实发生了错误,然后再进入第二个控制台消息以查看这是否是实际上发生错误的地方。
标签: javascript node.js rest express