1
私はこのエラーを見て、それを回避する方法をもっと知りたいだけです。私はjsonオブジェクトとしてデータを出力できる必要があります。これを回避する方法はありますか?ヘッダーを送信後に設定することはできません。 Nodejs/express with axios
私は基本的にチュートリアルからコピーして貼り付けていますが、なぜ深いリクエストを除いてここに取得しているのかわかりません。ここで
は誤りである:ここでは
Error: Can't set headers after they are sent.
[0] at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11)
[0] at ServerResponse.header (C:\Users\Amazo\Thrifa\moovr\node_modules\keystone\node_modules\express\lib\response.js:730:10)
[0] at ServerResponse.send (C:\Users\Amazo\Thrifa\moovr\node_modules\keystone\node_modules\express\lib\response.js:170:12)
[0] at ServerResponse.json (C:\Users\Amazo\Thrifa\moovr\node_modules\keystone\node_modules\express\lib\response.js:256:15)
[0] at C:/Users/Amazo/Thrifa/moovr/src/server/API/routes/offers.js:28:21
[0] at Promise.<anonymous> (C:/Users/Amazo/Thrifa/moovr/src/server/API/controllers/store/OfferController.js:25:7)
[0] at Promise.<anonymous> (C:\Users\Amazo\Thrifa\moovr\node_modules\keystone\node_modules\mongoose\node_modules\mpromise\lib\promise.js:177:8)
[0] at emitOne (events.js:77:13)
[0] at Promise.emit (events.js:169:7)
[0] at Promise.emit (C:\Users\Amazo\Thrifa\moovr\node_modules\keystone\node_modules\mongoose\node_modules\mpromise\lib\promise.js:84:38)
[0] at Promise.fulfill (C:\Users\Amazo\Thrifa\moovr\node_modules\keystone\node_modules\mongoose\node_modules\mpromise\lib\promise.js:97:20)
[0] at C:\Users\Amazo\Thrifa\moovr\node_modules\keystone\node_modules\mongoose\lib\query.js:1406:13
[0] at model.Document.init (C:\Users\Amazo\Thrifa\moovr\node_modules\keystone\node_modules\mongoose\lib\document.js:254:11)
[0] at completeOne (C:\Users\Amazo\Thrifa\moovr\node_modules\keystone\node_modules\mongoose\lib\query.js:1404:10)
[0] at Immediate.cb (C:\Users\Amazo\Thrifa\moovr\node_modules\keystone\node_modules\mongoose\lib\query.js:1158:11)
[0] at Immediate._onImmediate (C:\Users\Amazo\Thrifa\moovr\node_modules\keystone\node_modules\mongoose\node_modules\mquery\lib\utils.js:137:16)
[0] at processImmediate [as _immediateCallback] (timers.js:383:17)
は、コードは次のとおりです。
import OfferController from '../controllers/store/OfferController';
import RequestManager from '../utils/RequestManager';
import axios from 'axios';
const offerRoutes = (app) => {
app.get('/API/offers', (req, res, next) => {
axios
.get(
'https://d2fzm6xoa70bg8.cloudfront.net/login?auth=e4031de36f45af2172fa8d0f054efcdd8d4dfd62',
)
.then((response) => {
axios
.get('https://d2fzm6xoa70bg8.cloudfront.net/offerfilter?', {
headers: { Token: response.data.token },
})
.then((response) => {
const { data } = response;
data.map((item, i) => {
OfferController.findOne({ offer: item.offer }, (err, result) => {
if (err) {
res.json({
message: err,
});
return;
}
res.json({
message: 'Offer already exist',
result,
});
});
const params = {
offer: item.offer,
cert: item.cert,
txid: item.txid,
expires_in: item.expires_in,
expires_on: item.expires_on,
expired: item.expired,
height: item.height,
time: item.time,
category: item.category,
title: item.title,
quantity: item.quantity,
currency: item.currency,
sysprice: item.sysprice,
price: item.price,
ismine: item.ismine,
commission: item.commission,
offerlink: item.offerlink,
offerlink_guid: item.offerlink_guid,
offerlink_seller: item.offerlink_seller,
private: item.private,
safesearch: item.safesearch,
safetylevel: item.safetylevel,
paymentoptions: item.paymentoptions,
paymentoptions_display: item.paymentoptions_display,
alias_peg: item.alias_peg,
description: item.description,
alias: item.description,
address: item.address,
alias_rating: item.alias_rating,
alias_rating_count: item.alias_rating_count,
alias_rating_display: item.alias_rating_display,
geolocation: item.geolocation,
offers_sold: item.offers_sold,
};
OfferController.create(params, (err, results) => {
if (err) {
console.log(err);
return;
}
res.write(results);
});
});
})
.catch((err) => {
console.log('err 2nd request', err);
res.json({
confirmation: 'fail after 2nd request',
message: err,
});
});
})
.catch((err) => {
console.log('err 1st request');
res.json({
confirmation: 'fail before 2nd request',
message: err,
});
});
});
};
export default offerRoutes;
createメソッドから取得したデータはどのように返す必要がありますか?これについて行くベストプラクティスはありますか? –
現在、あなたは 'findOne'と' create'メソッドからデータを返す(しようとしています)。どちらを返すのですか?このルートハンドラが何を意味するのかを説明すると助けになるでしょう。 – pedromss