Javascript 如何在NodeJ上侦听输入而不使用bodyparser获取值

Javascript 如何在NodeJ上侦听输入而不使用bodyparser获取值,javascript,node.js,Javascript,Node.js,是否可以在nodejs“侦听”输入文本字段 我想在我的html页面上使用搜索输入,我想监听用户输入的任何值。不使用提交按钮和主体解析器获取最终值 我尝试在选择html输入后添加事件侦听器,但我的选择器未定义 这是我的server.js文件 // 3rd part modules const express = require('express') const hbs = require('hbs') const fs = require('fs'

是否可以在nodejs“侦听”输入文本字段

我想在我的html页面上使用搜索输入,我想监听用户输入的任何值。不使用提交按钮和主体解析器获取最终值


我尝试在选择html输入后添加事件侦听器,但我的选择器未定义

这是我的server.js文件

    // 3rd part modules
    const express = require('express')
    const hbs     = require('hbs')
    const fs      = require('fs')
    const moment  = require('moment')

    // App modules
    const userData = require('./fetch')

    // App basic configs
    const port = process.env.PORT || 3000
    const app = express()

    //Log when someone is on app
    app.use((req, res, next) => {
        const now = moment().format("D MMM YYYY, HH:mm")
        const clientIp = req.ip
        const log = `${now}: from ${clientIp}`
        fs.appendFile('server.log', `${log}\n`, (err) => {
            if (err) throw err
        })
        next()
    })

    // Maintenance mode
    // app.use((req, res, next) => {
    //     res.render('maintenance.hbs', {
    //         pageTitle: 'Maintenace mode'
    //     })
    // })

    // Express middleware to store public files & static pages
    app.use(express.static(`${__dirname}/public`))

    // View engine Handlebars
    app.set('view engine', 'hbs')

    // Use partials for header and footer
    hbs.registerPartials(`${__dirname}/views/partials`)

    // Pass custom functions everywhere
    hbs.registerHelper('getCurrentYear', () => {
        return new Date().getFullYear()
    });

    app.get('/', (req, res) => {
        res.render('home-page.hbs', {
            welcomeMessage: 'Welcome to home page',
            pageTitle: 'Home page',
            location: userData.location,
            currentTemp: userData.currentTemp,
            feelTemp: userData.feelTemp
        })
    })

    // Don't forget the command to nodemon to see changes on hbs files
    // nodemon server.js -e js,hbs,html,css

    app.listen(port, () => {
        console.log(`Server is up on ${port}`)
    })
这是我的fetch.js文件

// 3rd part library
const axios = require('axios')

// Input selection
const locationInput = document.querySelector('#locationInput').value()

// Encode user data & Use it to fetch his location
const encodedAddress = `greece${encodeURIComponent(locationInput)}`
const geocodeUrl = `https://maps.googleapis.com/maps/api/geocode/json?address=${encodedAddress}&key=AIzaSyAnzbpJRrrx9xl2ZjRdwOx4APrn-zgVscM`

const getWeatherData = async (encodedAddress) => {
    const location = await axios(geocodeUrl)

    if (location.data.status === 'ZERO_RESULTS') {
        throw new Error('Unable to find that address.')
    }
    const lat = location.data.results[0].geometry.location.lat
    const long = location.data.results[0].geometry.location.lng
    const weatherUrl = `https://api.darksky.net/forecast/95886b065ed14ca53b317610064fe04a/${lat},${long}?units=ca`

    const weatherData = await axios.get(weatherUrl)
    return {
        location,
        weatherData
    }
}

getWeatherData(encodedAddress).then((info) => {
    const location = info.location.data.results[0].formatted_address
    const currentTemp = info.weatherData.data.currently.temperature
    const feelTemp = info.weatherData.data.currently.apparentTemperature

    return {
        location,
        currentTemp,
        feelTemp
    }

}).catch((e) => {
    if (e.code === 'ENOTFOUND') {
        console.log('Unable to connect to API servers')
    } else {
        console.log(e.message)
    }
})

module.exports = {
    location,
    currentTemp,
    feelTemp
}
这是我的html

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Home</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>

<body>

    {{> header}}

    <p>{{welcomeMessage}}</p>
    <p>This is home page</p>
    <input id="locationInput" type="text" placeholder="Location">
    <p>{{location}}</p>
    <p>{{currentTemp}}°C</p>
    <p>Feels like {{feelTemp}}°C</p>
    {{> footer}}

</body>

</html>

家
{{>头}
{{welcomeMessage}}

这是主页

{{location}}

{{currentTemp}}}摄氏度

感觉像{{feelTemp}}}摄氏度

{{>页脚}
您可以使用该输入的事件
onchange
发送请求,如
ajax
或等


onchange
可能不同(
onchange
in,
.change()
method for,…)

您可以共享您的代码吗?Nodejs是后端,您无法监听客户端上DOM或JS中的任何更改。当输入字段的值发生变化时,您必须在nodejs中设置一个api路由,并将值发布到该路由。这可能吗?若要设置post路由并实时接收输入字段的更改值?“我尝试在选择html输入后添加事件侦听器,但我的选择器未定义。”你确定你的侦听器正确吗?@VindhyachalKumar我上载了它此事件侦听器必须在html上的其他脚本上运行?我想立即获取这个搜索输入的值,并直接从服务器端的API获取数据什么是“实时的”?在您的服务器中,您可以监听来自用户的请求(使用html和javascript)。你认为他们可以从……向你提出请求,我的意思是我不想在这个输入字段上使用提交按钮。我想在用户更改时直接获取值。。。但我发现当我启动应用程序时,文档没有定义我的方式不需要使用提交按钮,只需使用event onchange检查输入更改。当前端的输入发生更改时,您可以请求服务器端(nodejs)方法。您只需在HTML输入字段的更改事件期间请求node js的方法。