簡體   English   中英

TypeError: res.sendStatus is not a function - 為什么我一直收到這個錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM