Javascript 如何在NodeJ上侦听输入而不使用bodyparser获取值
是否可以在nodejs“侦听”输入文本字段 我想在我的html页面上使用搜索输入,我想监听用户输入的任何值。不使用提交按钮和主体解析器获取最终值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'
我尝试在选择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的方法。