首页 > 解决方案 > 类型错误:X 不是函数。Node.js - 快递

问题描述

此代码是 Web Api Controller 的有效解决方案。当我尝试实现关注点分离和fetchWebApi(url)const { fetchWebApi } = require('./fetchWebApiController'). 它给了我以下错误:curValue不是函数。不知道为什么它说功能。curValue不是函数。它只是一个变量,用作变量,从不作为函数调用。这是github项目的链接。

webApiController.js

const axios = require('axios')
// const { fetchWebApi } = require('./fetchWebApiController')
const { Stock } = require('../models/Stock')

exports.getWebApi = (req, res) => {
  let curValue = req.params.symbol
  console.log(`${curValue} - seacrhBox value`)
  console.log(typeof curValue)

  const urlCompact = `https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=${curValue}&outputsize=compact&apikey=6BUYSS9QR8Y9HH15`

  async function fetchWebApi(url) {
    try {
      const response = await axios.get(url)
      return parsedData = await Object.keys(response.data['Time Series (Daily)']).map(date => {
        return {
          date: Date.parse(date),
          open: Math.round(parseFloat(response.data['Time Series (Daily)'][date]['1. open']) * 100) / 100,
          high: Math.round(parseFloat(response.data['Time Series (Daily)'][date]['2. high']) * 100) / 100,
          low: Math.round(parseFloat(response.data['Time Series (Daily)'][date]['3. low']) * 100) / 100,
          close: Math.round(parseFloat(response.data['Time Series (Daily)'][date]['4. close']) * 100) / 100,
          volume: parseInt(response.data['Time Series (Daily)'][date]['5. volume'])
        }
      })
    } catch (ex) {
      console.log(`fetchWebApi error: ${ex}`)
    }
  }

  (async function creatStock() {//line33
    try {
      const webApiData = await fetchWebApi(urlCompact)
      const stock = new Stock({
        symbol: curValue,
        data: webApiData
      })

      const query = { symbol: `${curValue}` }
      const update = { $addToSet: { data: stock.data } }
      const options = { upsert: true, new: true }

      const stockResult = await Stock.findOneAndUpdate(query, update, options)
      console.log('Saved the symbol web TO db', stockResult.symbol)
      return res.send(webApiData)

    } catch (ex) {
      console.log(`creatStock error: ${ex}`)
    }
  })()
}

错误

TypeError: curValue is not a function
    at exports.getWebApi (/mnt/c/Users/john/Desktop/node/controllers/webApiController.js:33:3)
    at Layer.handle [as handle_request] (/mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/layer.js:95:5)
    at next (/mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/layer.js:95:5)
    at /mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/index.js:281:22
    at param (/mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/index.js:354:14)
    at param (/mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/index.js:365:14)
    at Function.process_params (/mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/index.js:410:3)
    at next (/mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/index.js:275:10)
    at Function.handle (/mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/index.js:174:3)
    at router (/mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/index.js:47:12)
    at Layer.handle [as handle_request] (/mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/index.js:317:13)
    at /mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/mnt/c/Users/john/Desktop/node/node_modules/express/lib/router/index.js:335:12)

标签: javascriptnode.jsexpressmongoose

解决方案


推荐阅读