[英]“TypeError: res.sendStatus is not a function” why I am getting this error after sometime?
[英]TypeError: res.sendStatus is not a function - Why do I keep getting this error?
在过去的几个月里,我一直在使用 Node.js/Express 制作 REST Api。 我的 controller.js 文件中的异步函数遇到了这个问题。 我的回调函数从客户端接收我的request
,但是当我想发送response
我不断收到此TypeError: res.sendStatus is not a function
Error。
这是我的代码:
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
};
您似乎没有正确设置 http 服务器和 Express app
对象。 您正在尝试将router
传递给普通的 http 服务器 - 这是行不通的。 您需要将路由器传递给app.use()
。
从此改变:
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
};
对此:
var express = require('express');
var app = express();
const routes = require('./routers');
//app.get('/', (req, res) => res.send('App is working'));
app.use('/', routes);
app.use('/api/idToken', routes);
app.listen(5000, () => {
console.log("server up");
});
module.exports = {
app
};
这里的关键是app
对象,而不是router
对象需要传递给 http 服务器。 在此修改后的代码中,我们使用app.listen()
创建自动为我们执行此操作的服务器。 在您的原始代码中,您可以这样做:
http.createServer(app).listen(...)
注意传递app
,而不是router
。 但是,我更喜欢只使用app.listen()
,它被设计为一个编码快捷方式(它为你创建了 http 服务器对象)。
此外,这看起来很可疑:
app.use('/', routes);
app.use('/api/idToken', routes);
因为您要在两个不同的 URL 位置提供完全相同的功能(除非这是您奇怪的意图)。 从技术上讲,您可以这样做,但这是非常不寻常的,所以我想知道这是否真的是您的意图。
您没有正确初始化 express。
var app = express();
...
var router = express.Router();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
router.post('/api/idToken', checkFirebaseLogin);
router.post('/', parseData);
...
app.use(router);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.