如何解决为什么 Express.js res.send(jsonObject.property) 会导致应用程序崩溃?
使用带有 JSON 对象属性的 response.send() 会导致应用程序崩溃。
const express = require('express')
const https = require('https')
const app = express()
app.get('/',function(req,res) {
const url = 'https://api.openweathermap.org/data/2.5/weather?q=London&appid=myID&units=metric'
https.get(url,function(response) {
response.on('data',function(data){
const weatherData = JSON.parse(data)
const temp = weatherData.main.temp
const weatherDescription = weatherData.weather[0].description
res.send(temp)
})
})
})
app.listen(3000,() => {
console.log('We are up and running... d(-_^)')
})
express deprecated res.send(status): Use res.sendStatus(status) instead at app.js:16:11
_http_server.js:248
throw new ERR_HTTP_INVALID_STATUS_CODE(originalStatusCode);
^
RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: -0.78
at ServerResponse.writeHead (_http_server.js:248:11)
at ServerResponse._implicitHeader (_http_server.js:239:8)
at ServerResponse.end (_http_outgoing.js:763:10)
at ServerResponse.send (C:path\node_modules\express\lib\response.js:221:10)
at IncomingMessage.<anonymous> (C:path\app.js:16:11)
at IncomingMessage.emit (events.js:311:20)
at IncomingMessage.Readable.read (_stream_readable.js:512:10)
at flow (_stream_readable.js:989:34)
at resume_ (_stream_readable.js:970:3)
at processticksAndRejections (internal/process/task_queues.js:84:21) {
code: 'ERR_HTTP_INVALID_STATUS_CODE'
有趣的是,预先使用字符串或简单地使用两个不同的 JSON 属性都可以:
res.send('' + temp)
或
res.send(weatherDescription + temp)
Express / Node 崩溃的原因是什么?你介意解释一下为什么会这样吗?
先谢谢你!
解决方法
res.send([body])
发送 HTTP 响应。
body 参数可以是 Buffer 对象、String、对象、Boolean 或 Array。例如:
您传入的是一个数字,它不是有效值类型之一。
(过去,传入一个数字作为第一个参数会设置状态代码,但现在不推荐使用该功能,因此是您的第一行输出)。
有趣的是预先使用字符串
someString + someNumber 会给你一个字符串,它是有效值类型之一。
,好吧,当您指定 number 时, res.send() 表示需要有效的状态代码。在这种情况下,您放置的临时 -0.78
不是有效的状态代码。但是当您指定一个 ''
或一个 string
或在表达式转换为字符串之后。这被视为有效响应而不是 statusCode。希望能回答您的问题。
let n = "3"+4
console.log(typeof n)
尝试运行此代码段。你会明白为什么它会被转换成字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。