javascript - Node JS : res. 发送不是函数

标签 javascript node.js express

我正在使用 nodeJS 制作我的第一个简单的 Counter Strike api 机器人,但是我在 res.send 函数方面遇到了一些问题。当我使用它时,它会抛出以下错误:“res.send 不是函数”。我尝试将 res.send 移到请求之外,但是这只在刷新页面后更新我的数据。任何帮助将不胜感激,因为我已经被这个问题困扰了一段时间。

我的代码:

const path = require('path')
const express = require('express')
var request = require("request")

/*const getSkinfo = require('./wyrskin')*/
const app = express()
const publicDirectoryPath = path.join(__dirname, '/public')
var skins_str = "empty"
app.use(express.static(publicDirectoryPath))
/*var string_skin = (JSON.stringify(getSkinfo))*/
app.get('/skin', (req, res) => {

    request('https://api.steamapis.com/market/items/730?api_key=xyz', { json: true }, (err, res, body) => {
        if (err) { return console.log(err); }
        var skins = []
        var score = 0
        var i;
        for (i = 0; i < body.data.length; i++) {
            var name = body.data[i].market_name
            var price = body.data[i].prices
            var img_url = body.data[i].image
            if (name.includes('Factory New') && !name.includes('StatTrak')) {
                skins.push(name + "," + price.avg + "^" + img_url)

            }
        }
        var num1 = Math.floor(Math.random() * 1215);
        var num2 = Math.floor(Math.random() * 1215);
        var out1 = "A : " + skins[num1]
        var out2 = "B : " + skins[num2]

        var mySubString1 = out1.substring(
            out1.lastIndexOf(",") + 1,
            out1.lastIndexOf("^")
        );
        var price1 = parseFloat(mySubString1)

        var mySubString2 = out2.substring(
            out2.lastIndexOf(",") + 1,
            out2.lastIndexOf("^")
        );
        var price2 = parseFloat(mySubString2)

        skins_str = (out1 + " ~ " + out2)
        console.log(skins_str)
        res.send({ skins: skins_str })

    })

})

app.listen(3000, () => {
    console.log('Server is up on port 3000.')



})

谢谢!

最佳答案

这实际上并不是我代理来自 Node 服务器的请求的方式。查看 node-fetch npm 包。 Promise 确实清理了代码。

但是您的代码中的错误是您在此函数的范围内有另一个 res 变量。如果您将其重命名为response,它应该可以工作吗?

如果您只是在响应中发送一个对象,也可以使用 res.json() 来代替。

希望这有帮助!

app.get('/skin', (req, res) => {

    request('https://api.steamapis.com/market/items/730?api_key=xyz', { json: true }, (err, response, body) => {
        if (err) { return console.log(err); }
        var skins = []
        var score = 0
        var i;
        for (i = 0; i < body.data.length; i++) {
            var name = body.data[i].market_name
            var price = body.data[i].prices
            var img_url = body.data[i].image
            if (name.includes('Factory New') && !name.includes('StatTrak')) {
                skins.push(name + "," + price.avg + "^" + img_url)

            }
        }
        var num1 = Math.floor(Math.random() * 1215);
        var num2 = Math.floor(Math.random() * 1215);
        var out1 = "A : " + skins[num1]
        var out2 = "B : " + skins[num2]

        var mySubString1 = out1.substring(
            out1.lastIndexOf(",") + 1,
            out1.lastIndexOf("^")
        );
        var price1 = parseFloat(mySubString1)

        var mySubString2 = out2.substring(
            out2.lastIndexOf(",") + 1,
            out2.lastIndexOf("^")
        );
        var price2 = parseFloat(mySubString2)

        skins_str = (out1 + " ~ " + out2)
        console.log(skins_str)
        res.json({ skins: skins_str })

    })

})

app.listen(3000, () => {
    console.log('Server is up on port 3000.')



})

关于javascript - Node JS : res. 发送不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62012924/

相关文章:

javascript - html页面是如何按顺序渲染的?

javascript - 奇怪的 Javascript/JQuery 条件语句行为

javascript - 将 base64 转换为 Javascript 中的文件

node.js - 在 Node + Mongo 中强制执行单个 DB Writer

node.js - ExpressJS 中间件 | req.params 在中间件中不可用?

javascript - Google Oauth - 在哪里登录用户、后端/前端

javascript - 使用 native 脚本转换器

node.js - 如何根据更改的文件修改 grunt watch 任务?

c++ - 在 Node.js 中使用 native 代码的最佳方式是什么?

node.js - "in a frame because it set ' X-Frame-Options ' to ' sameorigin '."在 Node APP中